File size: 5,347 Bytes
1dab173 8733027 c440981 1dab173 d9252cc d32b31e 1dab173 d9252cc d32b31e d9252cc d32b31e c440981 b1ac19a dd3f189 d9252cc 1dab173 b1ac19a 1dab173 dd3f189 1dab173 dd3f189 0971aeb 1dab173 dd3f189 b1ac19a 1dab173 d32b31e c440981 d32b31e 1dab173 63d62a7 c440981 ccea65c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
import os
import openai
from llama_index import StorageContext, load_index_from_storage, LLMPredictor, ServiceContext
from llama_index.tools import QueryEngineTool, ToolMetadata
from langchain.chat_models import ChatOpenAI
import gradio as gr
# Conectar Cuenta API de OpenAI
openai_api_key = os.environ.get('openai_key')
if openai_api_key:
os.environ["OPENAI_API_KEY"] = openai_api_key
openai.api_key = openai_api_key
else:
print("Error con la clave de acceso a OpenAI.")
#storage_context
# reconstruir storage context Doc_1
storage_context = StorageContext.from_defaults(persist_dir=".")
modelo = LLMPredictor(llm=ChatOpenAI(temperature=0, model_name='gpt-3.5-turbo-16k', max_tokens=7000,top_p=0))
service_context = ServiceContext.from_defaults(llm_predictor=modelo)
# Cargar index Doc_1
index = load_index_from_storage(service_context=service_context, storage_context=storage_context)
#Query Engine
query_engine = index.as_query_engine()
query_engine_tools = [
QueryEngineTool(
query_engine=query_engine,
metadata=ToolMetadata(
name='Prospecto medicamento Acsodix con instrucciones para su uso y precauciones',
description='Nombre del Medicamento: Acsodix. Principio Activo: Vortioxetina. Formas y Dosis: Acsodix 5, 10, y 20 mg (comprimidos recubiertos). Indicaciones: Tratamiento de episodios de depresión mayor en adultos. Contraindicaciones: Alergia a la Vortioxetina, toma de ciertos inhibidores de la monoaminooxidasa, enfermedad hepática grave, etc. Precauciones: Embarazo, lactancia, conducción, uso de otros medicamentos, etc. Efectos Adversos: Náuseas, diarrea, vómitos, mareo, prurito, etc. Instrucciones de Uso: Se puede tomar con o sin alimentos, no se aconseja la combinación con alcohol, etc. Sobredosis: Síntomas y tratamientos en caso de sobredosis. Presentación: Cajas conteniendo 30 comprimidos recubiertos en diferentes dosis. Almacenamiento: Conservar a temperatura ambiente inferior a 30 °C. Fabricante y Distribuidor: Mega Labs S.A., Industria Uruguaya, La dosis máxima de Acsodix para adultos menores a 65 años es de 20 mg al día. Se debe tener precaución cuando se traten pacientes mayores de 65 años de edad con dosis superiores a 10 mg de Vortioxetina una vez al día, ya que los datos son limitados.')
)
]
engine = index.as_query_engine(query_engine_tools=query_engine_tools, service_context=service_context,streaming=True,similarity_top_k=5)
# Prompt personalizado para el nuevo index
prompt = 'responder en español como un asistente experto en medicina, dando una respuesta detallada y reflejando de forma fiel los datos disponibles. Considerar segun aplique la siguiente informacion adicional: Nombre del Medicamento: Acsodix. Principio Activo: Vortioxetina. Formas y Dosis: Acsodix 5, 10, y 20 mg (comprimidos recubiertos). Indicaciones: Tratamiento de episodios de depresión mayor en adultos. Contraindicaciones: Alergia a la Vortioxetina, toma de ciertos inhibidores de la monoaminooxidasa, enfermedad hepática grave, etc. Precauciones: Embarazo, lactancia, conducción, uso de otros medicamentos, etc. Efectos Adversos: Náuseas, diarrea, vómitos, mareo, prurito, etc. Instrucciones de Uso: Se puede tomar con o sin alimentos, no se aconseja la combinación con alcohol, etc. Sobredosis: Síntomas y tratamientos en caso de sobredosis. Presentación: Cajas conteniendo 30 comprimidos recubiertos en diferentes dosis. Almacenamiento: Conservar a temperatura ambiente inferior a 30 °C. Fabricante y Distribuidor: Mega Labs S.A., Industria Uruguaya, La dosis máxima de Acsodix para adultos menores a 65 años es de 20 mg al día. Se debe tener precaución cuando se traten pacientes mayores de 65 años de edad con dosis superiores a 10 mg de Vortioxetina una vez al día, ya que los datos son limitados.'
# Funcion de chat para el nuevo index Doc_1
def predict(message):
# Agrega la pregunta del usuario al historial en formato OpenAI
history_openai_format = [{"role": "user", "content": message}]
# Agrega el prompt personalizado al inicio del historial
full_prompt = [{'role': 'assistant', 'content': prompt}]
full_prompt.extend(history_openai_format)
# Obtener la pregunta del usuario
user_message = full_prompt[-1]["content"]
# Utilizar el nuevo index Doc_1 para generar la respuesta
respuesta = engine.query(user_message)
# Respuesta de OpenAI basada en la consulta y agregarla al historial
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo-16k', # Use the new model
max_tokens=1000,
messages=full_prompt,
temperature=0.5,
stream=True
)
partial_message = ""
for chunk in response:
if len(chunk['choices'][0]['delta']) != 0:
partial_message = partial_message + chunk['choices'][0]['delta']['content']
yield partial_message
# Define la interfaz de Gradio para el nuevo index Doc_1
gr.Interface(
fn=predict,
inputs=gr.Textbox("Escribe una pregunta...", label="Pregunta"),
outputs=gr.Textbox(label="Respuesta"),
title="Nuevo Titulo",
description="Nueva Descripción",
theme="soft",
examples=["¿Se puede tomar con anticonceptivos?", "Hola"],
cache_examples=True,
button="Preguntar",
clearbutton=None,
).launch() |