PharmaIA / app.py
geronimo-pericoli's picture
Update app.py
f040e7b verified
raw
history blame contribute delete
No virus
5.42 kB
# Importacion de Librerias
import os
import openai
from llama_index.core import SimpleDirectoryReader, ServiceContext, VectorStoreIndex
from llama_index.core import (
SimpleDirectoryReader,
VectorStoreIndex,
ServiceContext,
StorageContext,
Response,
Document,
load_index_from_storage
)
from llama_index.llms.openai import OpenAI
import gradio as gr
from gradio import components
import textwrap
import datetime
from llama_index.core import Settings
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.tools import RetrieverTool
from llama_index.core.selectors import LLMSingleSelector, LLMMultiSelector
from llama_index.core.selectors import (
PydanticMultiSelector,
PydanticSingleSelector,
)
from llama_index.core.retrievers import (
BaseRetriever,
VectorIndexRetriever,
KGTableRetriever,
RouterRetriever
)
from llama_index.core import get_response_synthesizer
from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.prompts import PromptTemplate
from llama_index.core import QueryBundle
from llama_index.core.schema import NodeWithScore
from llama_index.core.postprocessor import SentenceTransformerRerank
from typing import List
openai.api_key = os.environ.get('openai_key')
os.environ["OPENAI_API_KEY"] = os.environ.get('openai_key')
# Cargar modelo
exec(os.environ.get('storage_context'))
### Inicio context ###
# load index
system_prompt = """Eres el asistente virtual de la empresa Pharma.IA, responde las consultas como un experto en fabricacion de medicamentos, validacion de software e inteligencia artificial. Responder en español y en forma breve.
Cuando no tengas la respuesta indica al usuario que consulte a info@pharma-ia.com.ar. Consulta:
"""
### Fin context ###
import gradio as gr
from gradio import components
import textwrap
# Definir la interfaz de usuario con Gradio
with gr.Blocks(theme='sudeepshouche/minimalist') as demo:
chat_history = []
chat_history_engine = []
def refresh(chat_history):
global kg_data
global chat_history_engine
kg_data = []
chat_history_engine = []
chat_history = [[None, None]]
gr.Info("¡Listo! Ya puedes seguir chateando.")
return chat_history
def summarize_assistant_messages(chat_history: List[ChatMessage]) -> List[ChatMessage]:
# Encontrar la anteúltima respuesta del asistente
assistant_messages = [msg for msg in chat_history if msg.role == MessageRole.ASSISTANT]
if len(assistant_messages) < 2:
return chat_history # No hay suficientes mensajes del asistente para resumir
anteultima_respuesta = assistant_messages[-2]
# Usar GPT-3.5 para generar un resumen de la anteúltima respuesta del asistente
prompt = Prompt(f"Responder SOLO con un resumen completo pero más corto del siguiente texto: \n\n{anteultima_respuesta.content}")
llm = OpenAI(model="gpt-3.5-turbo", temperature=0.1)
response = llm.predict(prompt)
# Crear un nuevo ChatMessage con el resumen como contenido y el rol de asistente
summarized_message = ChatMessage(content=response, role=MessageRole.ASSISTANT)
# Reconstruir el historial de chat reemplazando la anteúltima respuesta del asistente con el resumen
new_chat_history = [msg if msg != anteultima_respuesta else summarized_message for msg in chat_history]
return new_chat_history
def respond(message, chat_history):
global chat_history_engine
global result_metadata
# Si chat_history está vacío, inicialízalo con el mensaje del usuario actual
if not chat_history:
chat_history = [[message, ""]]
else:
# Si chat_history no está vacío, agrega el mensaje actual al final de la lista
chat_history.append([message, ""])
chat_history_engine = summarize_assistant_messages(chat_history_engine)
#chat_history_engine.append(ChatMessage(role=MessageRole.USER, content=message))
response = chat_engine.stream_chat(message, chat_history=chat_history_engine)
for text in response.response_gen:
chat_history[-1][1] += text # Agrega el texto de respuesta al último mensaje en chat_history
yield "", chat_history
print("----------")
print(memory.get_all())
gr.Markdown("""
# Asistente Pharma.IA
Realiza tus consultas sobre nuestras actividades y servicios
""")
with gr.Row():
with gr.Column():
chatbot = gr.Chatbot(show_label=False, show_copy_button=True, ) #layout="panel"
pregunta = gr.Textbox(show_label=False, autofocus=True, placeholder="Realiza tu consulta...")
pregunta.submit(respond, [pregunta, chatbot], [pregunta, chatbot])
with gr.Row():
btn_send = gr.Button(value="Preguntar", variant="primary")
clear = gr.Button(value="Limpiar")
btn_send.click(respond, [pregunta, chatbot], [pregunta, chatbot])
clear.click(refresh, inputs=[chatbot], outputs=[chatbot])
#response.change(visible, [], [btn_graph])
demo.queue()
demo.launch()