Faru2024 commited on
Commit
c38de1a
1 Parent(s): c7e8829

initial commit

Browse files
Files changed (2) hide show
  1. app.py +71 -0
  2. requirements.txt +9 -0
app.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #Importar librerias
2
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
3
+ from langchain.vectorstores import Pinecone
4
+ from langchain.prompts import PromptTemplate
5
+ from langchain_openai import ChatOpenAI, OpenAIEmbeddings
6
+ from langchain_core.output_parsers import StrOutputParser
7
+ from langchain_core.runnables import RunnablePassthrough
8
+ from langchain_community.document_loaders import PDFPlumberLoader
9
+ from langchain_core.documents.base import Document
10
+ import gradio as gr
11
+ import os
12
+ from dotenv import load_dotenv
13
+
14
+ #Set variables
15
+ openai_api_key = os.getenv('OPENAI_API_KEY')
16
+ embedding = OpenAIEmbeddings()
17
+ vectorstore = Pinecone.from_existing_index("resumerag", OpenAIEmbeddings())
18
+ template = """
19
+ ###INSTRUCCIONES:
20
+ Eres un asistente IA educado y profesional. Debes proveer al usuario información sobre Fernando Rodríguez
21
+
22
+ En tu respuesta POR FAVOR SIEMPRE:
23
+ (0) Se un lector detallista: lee la pregunta y contexto y entiendo ambos antes de responder.
24
+ (1) Comienza tus respuestas con un tono amigable, y reitera la pregunta de manera que el usario está seguro de que la entendiste.
25
+ (2) Si el contexto te permite responder la pregunta, escribe una respuesta detallada y útil con fuentes citadas. SI NO: Si no puedes encontrar la respuesta, indicale al usuario que no encontraste esa información sobre Fernando Rodríguez e invitale a entrevistarlo.
26
+ (3) Debajo de tu respuesta, por favor lista todas las fuentes citadas (ejemplo: un párrafo donde se sustenta tu respuesta)
27
+
28
+ Piensa paso a paso.
29
+ ###
30
+
31
+ Responde la siguiente pregunta utilizando el contexto brindado.
32
+ ### Pregunta: {question} ###
33
+
34
+ ### Contexto: {context} ###
35
+
36
+
37
+
38
+ ### Respuesta con fuentes:
39
+ """
40
+
41
+ #Elementos de la cadena langchain
42
+ llm = ChatOpenAI(model="gpt-3.5-turbo-1106", temperature=0, openai_api_key=openai_api_key)
43
+ retriever = vectorstore.as_retriever()
44
+ prompt = PromptTemplate.from_template(template)
45
+ #Crear chain
46
+ chain = (
47
+ {"context": retriever, "question": RunnablePassthrough()}
48
+ | prompt
49
+ | llm
50
+ | StrOutputParser()
51
+ )
52
+
53
+ #Wraper function
54
+ def get_answer(question):
55
+ answer = chain.invoke(question)
56
+ return answer
57
+
58
+ #Desplegar interfaz de Gradio
59
+ # Create the UI In Gradio
60
+ iface = gr.Interface(fn=get_answer, inputs=gr.Textbox(
61
+ value="Pregunta algo que quieras saber de él"),
62
+ outputs="markdown",
63
+ title="Asistente IA de Fernando Rodríguez",
64
+ description="Esta es una aplicación RAG construida con el API de OpenAI para el LLM y el modelo de embeddings, Pinecone para el vector index, Lang Chain para orquestar los elementos y Gradio para la GUI",
65
+ examples=[["Qué estudió Fernando Rodríguez?"],
66
+ ["Cuáles son sus principales debilidades?"],
67
+ ["Fernando sabe algo de cocina tailandesa?"]],
68
+ theme=gr.themes.Soft(),
69
+ allow_flagging="never",)
70
+
71
+ iface.launch()
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ langchain==0.2.5
2
+ langchain-core==0.2.9
3
+ langchain-openai==0.1.8
4
+ langchain-community==0.2.5
5
+ gradio==4.36.1
6
+ #os
7
+ pdfplumber==0.11.1
8
+ python-dotenv==1.0.1
9
+ pinecone-client==4.1.1