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)
|