Add application file
Browse files
app.py
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import openai
|
3 |
+
import os
|
4 |
+
from datetime import datetime
|
5 |
+
|
6 |
+
# Configuración de OpenAI
|
7 |
+
openai.api_key = os.environ["openai"]
|
8 |
+
|
9 |
+
# Prompt principal para la renovación de recetas
|
10 |
+
def get_current_datetime():
|
11 |
+
now = datetime.now()
|
12 |
+
return now.strftime("%Y-%m-%d %H:%M")
|
13 |
+
|
14 |
+
main_prompt = f'''
|
15 |
+
Hoy es {get_current_datetime()}
|
16 |
+
Eres un asistente virtual llamado PreDoc, especializado en ayudar a los usuarios a renovar recetas médicas. Tu tarea es guiar al usuario para que pueda renovar su receta médica. El proceso será el siguiente:
|
17 |
+
|
18 |
+
1. Saludar al usuario de manera amable y preguntarle por la receta que desea renovar.
|
19 |
+
2. Si el usuario menciona alguna receta específica, comprobar si está disponible y es válida en nuestra base de datos. Para esta demostración, las recetas disponibles son:
|
20 |
+
- Yasmin - 3/0.03.x 28 (vigente hasta 2024-12-31)
|
21 |
+
- Paracetamol 500mg (vigente hasta 2024-11-30)
|
22 |
+
3. Si la receta está disponible y es válida, proceder con la solicitud de renovación de manera amigable.
|
23 |
+
4. Si la receta no está disponible o está fuera de vigencia, informarle sobre los pasos a seguir para renovarla. Si la receta está fuera de vigencia, explícale que necesitará una nueva consulta médica para renovar la receta.
|
24 |
+
|
25 |
+
Recuerda que el usuario tiene cobertura OSECAC. Actúa de forma clara y cordial para asegurar una experiencia positiva y sin frustraciones.
|
26 |
+
|
27 |
+
Datos de usuario:
|
28 |
+
Nombre: Karina
|
29 |
+
Recetas:
|
30 |
+
- Medicamento: Yasmin - 3/0.03.x 28, Vigencia: 2024-12-31
|
31 |
+
- Medicamento: Paracetamol 500mg, Vigencia: 2024-11-30
|
32 |
+
Cobertura: OSECAC
|
33 |
+
'''
|
34 |
+
|
35 |
+
# Función para manejar el flujo de la conversación
|
36 |
+
def model(text, conversation):
|
37 |
+
messages = [
|
38 |
+
{"role": "system", "content": main_prompt}
|
39 |
+
]
|
40 |
+
|
41 |
+
# Incluir todas las interacciones previas como mensajes separados
|
42 |
+
for user_message, bot_message in conversation:
|
43 |
+
messages.append({"role": "user", "content": user_message})
|
44 |
+
messages.append({"role": "assistant", "content": bot_message})
|
45 |
+
|
46 |
+
# Añadir el mensaje actual del usuario
|
47 |
+
messages.append({"role": "user", "content": text})
|
48 |
+
|
49 |
+
# Llamada a la API de OpenAI para generar una respuesta
|
50 |
+
response = openai.ChatCompletion.create(
|
51 |
+
model="gpt-4o",
|
52 |
+
messages=messages,
|
53 |
+
stream=False,
|
54 |
+
temperature=0 # Ajustar la temperatura para obtener respuestas naturales
|
55 |
+
)
|
56 |
+
|
57 |
+
# Obtener la respuesta generada
|
58 |
+
output = response["choices"][0]["message"]['content']
|
59 |
+
return output
|
60 |
+
|
61 |
+
# Función de interacción con el chatbot usando Gradio
|
62 |
+
def interact_with_chatbot(text, conversation):
|
63 |
+
# Procesar el mensaje a través del modelo
|
64 |
+
response = model(text, conversation)
|
65 |
+
|
66 |
+
# Devolver la respuesta generada por el modelo
|
67 |
+
return response, conversation # Asegúrate de devolver el estado de la conversación
|
68 |
+
|
69 |
+
# Lanzar la interfaz Gradio con ChatInterface
|
70 |
+
gr.ChatInterface(fn=interact_with_chatbot, inputs=["text", "state"], outputs=["text", "state"], title="Renovación de Recetas Chatbot").launch(debug=True)
|