Demo-IR / app.py
Benjov's picture
19/10/2023
6e38f78
raw
history blame
3.39 kB
import os
import pandas as pd
import openai
import re
import json
from langchain.chat_models import ChatOpenAI
import regex
import gradio as gr
from langchain.schema import Document
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from openai.embeddings_utils import get_embedding
from openai.embeddings_utils import cosine_similarity
import gspread # See: https://docs.gspread.org/en/v5.10.0/user-guide.html
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime
# API de OpenAI
openai.api_key = os.getenv("OPENAI_API_KEY")
# Establece las credenciales y la API
#credentials = os.getenv( "credentials" )
#credentials = json.loads( credentials )
#gc = gspread.service_account_from_dict( credentials )
#Google_URL = os.getenv( "Google_URL" )
# Cargar el archivo
df_Expediente = pd.read_csv( os.getenv( "Data" ) )
# Main OpenAI Function
#
# Function: Get embeddings
def get_embedding( text , model ):
text = text.replace("\n", " ")
return openai.Embedding.create( input = [text], model = model )['data'][0]['embedding']
# Funci贸n de b煤squeda
def buscar( busqueda, datos, n_resultados):
#
busqueda_embed = get_embedding( busqueda, "text-embedding-ada-002" )
#
datos['Similitud'] = datos['Embedding'].apply( lambda x: cosine_similarity( eval( x ) , busqueda_embed ) )
#
datos = datos.sort_values('Similitud', ascending = False )
#
return datos.iloc[:n_resultados][['Documento', 'Pagina', 'Textos', 'NumPalabras', 'Embedding', 'Similitud']]
#
def Chat( user_message_1 ):
#
df_final = buscar( user_message_1, df_Expediente, 20).reset_index( drop = True)
#
Textos = df_final[ ['Documento', 'Pagina', 'Textos'] ]
#
Textos_Concatenados = '\n\n\n'.join( Textos.apply( lambda row: ' | '.join( row ), axis = 1) )
#
# Save Question and date time
#update_records( user_message_1 )
return Textos_Concatenados
#
#
with gr.Blocks() as demo:
#
gr.Markdown("App basada en servicios (Embeddings) de OpenAI (Chat GPT-3.5)")
gr.Markdown("Este es un producto de prueba desarrollado por Games Econ")
gr.Markdown("Contacto: ")
gr.Markdown("Este es un information retrieval system o sistema de recuperaci贸n de informaci贸n.")
gr.Markdown("Este tipo de herramientas son un proceso para obtener informaci贸n relevante \
para una necesidad de informaci贸n a partir de una colecci贸n de textos.")
gr.Markdown("Las b煤squedas pueden basarse en un texto completo, una frase o una serie de conceptos.")
gr.Markdown("No obstante, cuanto m谩s detallada sea la sentencia buscada, la recuperaci贸n de \
informaci贸n ser谩 m谩s precisa.")
gr.Markdown("En alguna medida, los motores de b煤squeda web (como Google) son ejemplos de estos sistemas.")
busqueda = gr.Textbox(label = "Escribe la pregunta, tema o enunciado.")
greet_btn = gr.Button("Preguntar")
# Crear dos widgets de salida en lugar de uno
output1 = gr.Textbox(label = "El Top 20 de los extractos de documentos que coinciden con la consulta son:")
# Modificar la funci贸n click para asignar cada parte de la tupla a un widget diferente
greet_btn.click(fn = Chat, inputs=[busqueda], outputs=[output1])
#
#demo.launch( share = True )
demo.launch( )
#
#