Compare commits
No commits in common. "develop" and "main" have entirely different histories.
|
@ -4,19 +4,3 @@ names/*
|
|||
nameshf/*
|
||||
photo_2023-09-24_00-25-17.jpg
|
||||
__pycache__/FindinDB.cpython-38.pyc
|
||||
embeddings/*
|
||||
tuned_models/*
|
||||
Copies3/*
|
||||
Copies2/*
|
||||
Tnames/*
|
||||
TCopies/*
|
||||
names2/*
|
||||
Intencionality3/*
|
||||
__pycache__/FindinDB.cpython-311.pyc
|
||||
__pycache__/main.cpython-311.pyc
|
||||
sns_violin*
|
||||
NewData*
|
||||
motor05102023.csv
|
||||
run.sh
|
||||
|
||||
Finetuning/embeddings/all-mpnet-base-v2/*
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
from sentence_transformers import SentenceTransformer
|
||||
# Preguntas y respuestas especializado en eso "multi-qa-mpnet-base-dot-v1"
|
||||
# uno de uso gereal el de mejor desempeño all-mpnet-base-v2
|
||||
# el mas rapido "paraphrase-MiniLM-L3-v2" y "all-MiniLM-L6-v2"
|
||||
# muy rappudo y muy acertado "all-MiniLM-L12-v2"
|
||||
#models=["all-MiniLM-L12-v2","paraphrase-MiniLM-L3-v2" , "all-MiniLM-L6-v2",
|
||||
models=["all-mpnet-base-v2","multi-qa-mpnet-base-dot-v1"]
|
||||
|
||||
for model in models:
|
||||
modelST = SentenceTransformer(model)
|
||||
# Define the path where you want to save the model
|
||||
save_path = './embeddings/%s/'%(model)
|
||||
# Save the model
|
||||
modelST.save(save_path)
|
||||
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
import gradio as gr
|
||||
from faiss import write_index, read_index
|
||||
|
||||
from langchain import PromptTemplate
|
||||
from langchain.chains import LLMChain
|
||||
from langchain.document_loaders import TextLoader
|
||||
from langchain.text_splitter import CharacterTextSplitter
|
||||
from langchain.vectorstores import FAISS
|
||||
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
||||
from langchain.document_loaders import UnstructuredFileLoader
|
||||
from langchain.document_loaders.recursive_url_loader import RecursiveUrlLoader
|
||||
from langchain.document_loaders import UnstructuredURLLoader
|
||||
from langchain.document_loaders.csv_loader import CSVLoader
|
||||
from langchain import LLMChain
|
||||
from langchain.llms import GPT4All
|
||||
from langchain.embeddings import GPT4AllEmbeddings
|
||||
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
|
||||
from langchain.callbacks.base import BaseCallbackManager
|
||||
from langchain.document_loaders import DataFrameLoader
|
||||
from langchain.embeddings import HuggingFaceEmbeddings
|
||||
import pandas as pd
|
||||
import sqlite3
|
||||
from sentence_transformers import SentenceTransformer
|
||||
from fastapi import FastAPI
|
||||
#from cleantext import clean
|
||||
import re
|
||||
model_name = 'hiiamsid/sentence_similarity_spanish_es'
|
||||
model_kwargs = {'device': 'cpu'}
|
||||
encode_kwargs = {'normalize_embeddings': True}
|
||||
hf = HuggingFaceEmbeddings(
|
||||
model_name=model_name,
|
||||
model_kwargs=model_kwargs,
|
||||
encode_kwargs=encode_kwargs
|
||||
)
|
||||
|
||||
CUSTOM_PATH = "/angela"
|
||||
app = FastAPI()
|
||||
|
||||
@app.get("/")
|
||||
def read_main():
|
||||
return {"message": "This is your main app"}
|
||||
|
||||
|
||||
def loadModels():
|
||||
#model = GPT4All("orca-mini-3b.ggmlv3.q4_0.bin")
|
||||
callback_manager = BaseCallbackManager([StreamingStdOutCallbackHandler()])
|
||||
llm = GPT4All(model="orca-mini-3b.ggmlv3.q4_0.bin",temp=0.1,streaming=True)#callback_manager=callback_manager, verbose=True,repeat_last_n=0
|
||||
embeddings = GPT4AllEmbeddings()
|
||||
return llm, embeddings
|
||||
|
||||
|
||||
def loadCopysAndData(pathsqlite="motor.sqlite"):
|
||||
con = sqlite3.connect(pathsqlite)
|
||||
copies_df = pd.read_sql_query("SELECT * from copies", con)
|
||||
copiesT = copies_df[copies_df.copy_start =="T"]
|
||||
copiesT=copiesT[["copy_message","id","name"]]
|
||||
data = copiesT
|
||||
B=DataFrameLoader(data,page_content_column="copy_message")
|
||||
B2=DataFrameLoader(data,page_content_column="name")
|
||||
documents=B.load()
|
||||
documents2=B2.load()
|
||||
return documents,documents2
|
||||
|
||||
def makeFaissdb(documents,folder_path,embedding):
|
||||
try:
|
||||
db=FAISS.load_local(folder_path=folder_path,embeddings=embedding)
|
||||
|
||||
except:
|
||||
db = FAISS.from_documents(documents, embedding)
|
||||
FAISS.save_local(db,folder_path=folder_path)
|
||||
return db
|
||||
|
||||
llm,emb=loadModels()
|
||||
documents,documents2=loadCopysAndData()
|
||||
|
||||
db=makeFaissdb(documents,"Copies",emb)
|
||||
db2=makeFaissdb(documents2,"names",emb)
|
||||
db3=makeFaissdb(documents2,"nameshf",hf)
|
||||
|
||||
def FinderDbs(query,dbs,filtred=False,th=1.2):
|
||||
AllData={}
|
||||
for dbt in dbs:
|
||||
Sal = dbt.similarity_search_with_score(query,4)
|
||||
for output in Sal:
|
||||
if output[0].metadata["id"] in AllData.keys():
|
||||
AllData[output[0].metadata["id"]]["d"]=min([AllData[output[0].metadata["id"]]["d"]-0.1,output[1]-0.1])
|
||||
else:
|
||||
AllData[output[0].metadata["id"]]={"d":output[1],"page_content":output[0].page_content}
|
||||
#for item in AllData.items():
|
||||
# print(item)
|
||||
|
||||
if filtred:
|
||||
filtredData={}
|
||||
for row in AllData.keys():
|
||||
if AllData[row]["d"]<1.2:
|
||||
filtredData[row]=AllData[row]
|
||||
filtredData=dict(sorted(filtredData.items(), key=lambda item: item[1]["d"]))
|
||||
return filtredData,filtredData.keys()
|
||||
|
||||
|
||||
else:
|
||||
AllData=dict(sorted(AllData.items(), key=lambda item: item[1]["d"]))
|
||||
return AllData,AllData.keys()
|
||||
|
||||
def QARequest(Pregunta,filtred=False):
|
||||
query = Pregunta
|
||||
AllData=FinderDbs(query,[db,db2],filtred)
|
||||
|
||||
if AllData:
|
||||
import markdown
|
||||
AllData = list(AllData)
|
||||
#lista = "<div style='border-style = solid;border-width:1px;border-radius:10px'>"
|
||||
lista = ""
|
||||
for k,i in enumerate(AllData[0].items()):
|
||||
titulo = f"<div style='border-style = solid;border-width:1px;border-radius:10px;margin:14px;padding:14px'><h2>Respuesta {k+1}</h2>"
|
||||
to_append = markdown.markdown(i[1]['page_content'])
|
||||
lista = lista + titulo + to_append + '</div>'
|
||||
#lista.append('<br>')
|
||||
#lista = lista + '</div>'
|
||||
|
||||
AllData[0] = lista
|
||||
return AllData
|
||||
|
||||
|
||||
|
||||
with gr.Blocks() as demo:
|
||||
gr.Image("logo.jpg",height=100)
|
||||
gr.Markdown("Esta es la busqueda que hace el usuario")
|
||||
Pregunta = gr.Textbox(label="Pregunta")
|
||||
#Pregunta = re.sub(r"(@\[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)|^rt|http.+?", "", Pregunta)
|
||||
#Pregunta=Pregunta.strip().lower()
|
||||
|
||||
filtred=gr.Checkbox(label="filtrado")
|
||||
|
||||
gr.Markdown("Respuestas para orca desde los copys")
|
||||
Respuesta = gr.Textbox(label="Respuesta")
|
||||
id = gr.Textbox(label="id")
|
||||
# metrica=gr.Textbox(label="metrica")
|
||||
# gr.Markdown("Respuestas para orca desde los names")
|
||||
# Respuesta2 = gr.Textbox(label="Respuesta2")
|
||||
# id2 = gr.Textbox(label="id2")
|
||||
# metrica2=gr.Textbox(label="metrica2")
|
||||
# gr.Markdown("Respuestas para hf desde los names")
|
||||
# Respuesta3 = gr.Textbox(label="Respuesta3")
|
||||
# id3 = gr.Textbox(label="id3")
|
||||
# metrica3=gr.Textbox(label="metrica3")
|
||||
Enviar_btn = gr.Button("Responder")
|
||||
|
||||
Enviar_btn.click(fn=QARequest, inputs=[Pregunta,filtred], outputs=[gr.HTML(Respuesta),id], api_name="api_angela") #
|
||||
|
||||
#demo.launch(root_path="angela") #
|
||||
|
||||
gradio_app = gr.routes.App.create_app(demo)
|
||||
|
||||
app.mount(CUSTOM_PATH, gradio_app)
|
||||
|
||||
#app = demo.mount_gradio_app(app, io, path=CUSTOM_PATH)
|
||||
|
|
@ -1,133 +0,0 @@
|
|||
""" from sentence_transformers import SentenceTransformer, models
|
||||
|
||||
## Step 1: use an existing language model
|
||||
word_embedding_model = models.Transformer('distilroberta-base')
|
||||
|
||||
## Step 2: use a pool function over the token embeddings
|
||||
pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension())
|
||||
|
||||
## Join steps 1 and 2 using the modules argument
|
||||
model = SentenceTransformer(modules=[word_embedding_model, pooling_model])
|
||||
|
||||
from sentence_transformers import InputExample
|
||||
|
||||
from datasets import load_dataset
|
||||
|
||||
dataset_id = "embedding-data/QQP_triplets"
|
||||
# dataset_id = "embedding-data/sentence-compression"
|
||||
|
||||
dataset = load_dataset(dataset_id)
|
||||
|
||||
|
||||
train_examples = []
|
||||
train_data = dataset['train']['set']
|
||||
# For agility we only 1/2 of our available data
|
||||
n_examples = dataset['train'].num_rows // 2
|
||||
|
||||
for i in range(10):
|
||||
example = train_data[i]
|
||||
train_examples.append(InputExample(texts=[example['query'], example['pos'][0]]))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
from torch.utils.data import DataLoader
|
||||
|
||||
train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=2)
|
||||
|
||||
|
||||
from sentence_transformers import losses
|
||||
|
||||
train_loss = losses.MultipleNegativesRankingLoss(model=model)
|
||||
|
||||
num_epochs = 10
|
||||
|
||||
warmup_steps = int(len(train_dataloader) * num_epochs * 0.1) #10% of train data
|
||||
|
||||
model.fit(train_objectives=[(train_dataloader, train_loss)],epochs=num_epochs,warmup_steps=2)
|
||||
|
||||
|
||||
"""
|
||||
from sentence_transformers import SentenceTransformer, losses, InputExample
|
||||
from torch.utils.data import DataLoader
|
||||
|
||||
|
||||
|
||||
|
||||
model="embeddings/all-mpnet-base-v2"
|
||||
modelST = SentenceTransformer(model)
|
||||
|
||||
|
||||
train_loss = losses.MultipleNegativesRankingLoss(model=modelST)
|
||||
|
||||
queries=["reportar un bache en mi comunidad",
|
||||
"¿Como reporto un bacheo en mi comunidad?",
|
||||
"Quiero informar sobre un hoyo en la calle cerca de mi hogar.",
|
||||
"Necesito reportar un bache en la vía cercana a mi residencia.",
|
||||
"Estoy preocupado por un hueco en la carretera que está cerca de donde vivo.",
|
||||
"Me gustaría notificar sobre un desnivel en la carretera en las inmediaciones de mi domicilio.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi casa.",
|
||||
"Estoy interesado en denunciar una irregularidad en la calle cercana a mi vivienda.",
|
||||
"Necesito dar aviso sobre un problema en la carretera próxima a mi residencia.",
|
||||
"Estoy observando un inconveniente en la carretera cerca de donde vivo y quisiera reportarlo.",
|
||||
"Me gustaría informar sobre un obstáculo en la vía que está cerca de mi casa.",
|
||||
"Quiero señalar un desperfecto en la carretera cercana a mi hogar.",
|
||||
"Necesito poner en conocimiento de las autoridades un bache en la calle adyacente a mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades viales para solucionar un problema en la vía cerca de mi vivienda.",
|
||||
"Me gustaría expresar mi preocupación acerca de un bache en la carretera que está cerca de donde resido.",
|
||||
"Quiero dejar constancia de un deterioro en la calle cercana a mi casa.",
|
||||
"Estoy interesado en informar sobre un desperfecto vial en la carretera cercana a mi hogar.",
|
||||
"Necesito notificar sobre un agujero en la carretera que conduce a mi residencia.",
|
||||
"Me gustaría alertar sobre un bache en la vía cerca de mi hogar.",
|
||||
"Quiero dar aviso sobre un desnivel en la calle próxima a mi vivienda.",
|
||||
"Estoy buscando reportar un problema vial en la carretera cercana a mi casa.",
|
||||
"Necesito informar sobre un obstáculo en la vía que está cerca de mi domicilio.",
|
||||
"Me gustaría señalar una irregularidad en la carretera adyacente a mi residencia.",
|
||||
"Quiero presentar una queja sobre un desperfecto en la calle cercana a mi hogar.",
|
||||
"Estoy interesado en denunciar un socavón en la vía que conduce a mi casa.",
|
||||
"Necesito notificar sobre un inconveniente en la carretera próxima a mi residencia.",
|
||||
"Me gustaría informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi casa.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
|
||||
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
|
||||
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
|
||||
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
|
||||
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
|
||||
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
|
||||
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
|
||||
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
|
||||
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
|
||||
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
|
||||
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
|
||||
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
|
||||
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
|
||||
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
|
||||
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia."
|
||||
]
|
||||
|
||||
train_examples = []
|
||||
for q in queries:
|
||||
train_examples.append(InputExample(texts=[ 'Reportar un bacheo',q]))
|
||||
|
||||
print(train_examples)
|
||||
train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=2)
|
||||
print(train_dataloader)
|
||||
num_epochs = 2
|
||||
warmup_steps = int(len(train_dataloader) * num_epochs * 0.1) #10% of train data
|
||||
|
||||
modelST.fit(train_objectives=[(train_dataloader, train_loss)],epochs=num_epochs,warmup_steps=2)
|
||||
save_path = './Finetuning/%s/'%(model)
|
||||
# Save the model
|
||||
modelST.save(save_path)
|
283
main.py
283
main.py
|
@ -1,283 +0,0 @@
|
|||
#import gradio as gr
|
||||
from faiss import write_index, read_index
|
||||
from typing import List
|
||||
#from langchain import PromptTemplate
|
||||
from langchain.document_loaders import TextLoader
|
||||
from langchain.text_splitter import CharacterTextSplitter
|
||||
from langchain.vectorstores import FAISS
|
||||
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
||||
from langchain.document_loaders import UnstructuredFileLoader
|
||||
from langchain.document_loaders.recursive_url_loader import RecursiveUrlLoader
|
||||
from langchain.document_loaders import UnstructuredURLLoader
|
||||
from langchain.document_loaders.csv_loader import CSVLoader
|
||||
#from langchain import LLMChain
|
||||
from pydantic import BaseModel
|
||||
from langchain.schema.embeddings import Embeddings
|
||||
from langchain.document_loaders import DataFrameLoader
|
||||
from langchain.embeddings import HuggingFaceEmbeddings
|
||||
import pandas as pd
|
||||
import sqlite3
|
||||
from sentence_transformers import SentenceTransformer
|
||||
from fastapi import FastAPI
|
||||
from unidecode import unidecode
|
||||
from nltk.corpus import stopwords
|
||||
from typing import Optional
|
||||
#from cleantext import clean
|
||||
import re
|
||||
from langid.langid import LanguageIdentifier
|
||||
from langid.langid import model as modellangid
|
||||
import time
|
||||
from anthropic import Anthropic, HUMAN_PROMPT, AI_PROMPT
|
||||
import json
|
||||
model="Modelo_embedding_Mexico_Puebla/paraphrase-multilingual-mpnet-base-v2/model"
|
||||
entrenamiento="V1.3"
|
||||
keyanthropic=""
|
||||
|
||||
|
||||
class CustomEmbedding(Embeddings, BaseModel,):
|
||||
"""embedding model with preprocessing"""
|
||||
def _get_embedding(self,text) -> List[float]:
|
||||
#print(text,"text")
|
||||
text=remove_unwanted(text,punctuationOK=True,stopOK=True)
|
||||
Sal=emb.encode(text)
|
||||
return Sal
|
||||
def embed_documents(self, texts: List[str]) -> List[List[float]]:
|
||||
Sal=[]
|
||||
for text in texts:
|
||||
Sal.append(self._get_embedding(text))
|
||||
|
||||
return Sal
|
||||
def embed_query(self, text: str) -> List[float]:
|
||||
return self._get_embedding(text)
|
||||
|
||||
def remove_emoji(string):
|
||||
emoji_pattern = re.compile("["
|
||||
u"\U0001F600-\U0001F64F" # emoticons
|
||||
u"\U0001F300-\U0001F5FF" # symbols & pictographs
|
||||
u"\U0001F680-\U0001F6FF" # transport & map symbols
|
||||
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
|
||||
u"\U00002702-\U000027B0"
|
||||
u"\U000024C2-\U0001F251"
|
||||
"]+", flags=re.UNICODE)
|
||||
return emoji_pattern.sub(r' ', string)
|
||||
|
||||
def remove_unwanted(document,stopOK=False,punctuationOK=False,xtrasOK=False, emojiOk=False, unidecodeOK=False):
|
||||
if punctuationOK:
|
||||
# remove punctuation
|
||||
for sig in [".",",","!","¿","?","=","(",")"]:
|
||||
document=document.replace(sig," ")
|
||||
|
||||
if xtrasOK:
|
||||
# remove user mentions
|
||||
document = re.sub("@[A-Za-z0-9_]+"," ", document)
|
||||
# remove URLS
|
||||
document = re.sub(r'http\S+', ' ', document)
|
||||
# remove hashtags
|
||||
document = re.sub("#[A-Za-z0-9_]+","", document)
|
||||
if emojiOk:
|
||||
# remove emoji's
|
||||
document = remove_emoji(document)
|
||||
|
||||
#document = re.sub("[^0-9A-Za-z ]", "" , document)
|
||||
# remove double spaces
|
||||
#print(document)
|
||||
if unidecodeOK:
|
||||
document=unidecode(document)
|
||||
|
||||
|
||||
if stopOK:
|
||||
words=document.split(" ")
|
||||
stop_words = set(stopwords.words('spanish'))
|
||||
words = [w for w in words if not w in stop_words]
|
||||
document=" ".join(words)
|
||||
|
||||
|
||||
|
||||
document = document.replace(' ',"")
|
||||
#print(document)
|
||||
return document.strip().lower()
|
||||
|
||||
def loadmodelEmb(model_name = "embeddings/all-MiniLM-L6-v2",model_kwargs = {'device': 'cpu'}):
|
||||
st = SentenceTransformer(model_name,device='cpu')
|
||||
return st
|
||||
|
||||
|
||||
def loadCopysAndData(pathsqlite="/opt/web2py/applications/MotorAngela/databases/storage.sqlite"):
|
||||
con = sqlite3.connect(pathsqlite)
|
||||
copies_df = pd.read_sql_query("SELECT * from copies WHERE intentionality IS NOT NULL", con)
|
||||
copiesT = copies_df
|
||||
copiesT=copiesT[["copy_message","id","name","intentionality"]]
|
||||
print(copiesT)
|
||||
data = copiesT
|
||||
#print(data)
|
||||
B=DataFrameLoader(data,page_content_column="copy_message")
|
||||
B2=DataFrameLoader(data,page_content_column="intentionality")
|
||||
documents=B.load()
|
||||
documents2=B2.load()
|
||||
return documents,documents2
|
||||
|
||||
def makeFaissdb(documents,folder_path,embedding):
|
||||
try:
|
||||
db=FAISS.load_local(folder_path=folder_path,embeddings=embedding)
|
||||
|
||||
except:
|
||||
db = FAISS.from_documents(documents, embedding)
|
||||
FAISS.save_local(db,folder_path=folder_path)
|
||||
return db
|
||||
|
||||
#llm,emb=loadModels()
|
||||
|
||||
documents,documents2=loadCopysAndData()
|
||||
emb=loadmodelEmb(model_name = model)
|
||||
emb2=CustomEmbedding()
|
||||
db=makeFaissdb(documents,"Copies3",emb2)
|
||||
db2=makeFaissdb(documents2,"Intentionality3",emb2)
|
||||
#db3=makeFaissdb(documents2,"nameshf",hf)
|
||||
identifier = LanguageIdentifier.from_modelstring(modellangid, norm_probs=True)
|
||||
|
||||
|
||||
|
||||
|
||||
def FinderDbs(query,dbs,filtred=0.4):
|
||||
AllData={}
|
||||
for dbt in dbs:
|
||||
Sal = dbt.similarity_search_with_score(query,4)
|
||||
for output in Sal:
|
||||
if output[0].metadata["id"] in AllData.keys():
|
||||
AllData[output[0].metadata["id"]]["d"]=min([AllData[output[0].metadata["id"]]["d"],output[1]])
|
||||
else:
|
||||
AllData[output[0].metadata["id"]]={"d":output[1],"page_content":output[0].page_content}
|
||||
#for item in AllData.items():
|
||||
# print(item)
|
||||
|
||||
if filtred>0:
|
||||
filtredData={}
|
||||
for row in AllData.keys():
|
||||
if AllData[row]["d"]<filtred:
|
||||
filtredData[row]=AllData[row]
|
||||
filtredData=dict(sorted(filtredData.items(), key=lambda item: item[1]["d"]))
|
||||
return filtredData,filtredData.keys()
|
||||
|
||||
|
||||
else:
|
||||
AllData=dict(sorted(AllData.items(), key=lambda item: item[1]["d"]))
|
||||
return AllData,AllData.keys()
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
@app.get("/")
|
||||
def read_main():
|
||||
return {"message": "This is your main app"}
|
||||
|
||||
class Response(BaseModel):
|
||||
query: str
|
||||
filtred : Optional[float] = -9.0
|
||||
|
||||
|
||||
|
||||
@app.post("/angela-api/")
|
||||
def calculate_api(response: Response):
|
||||
query = response.query
|
||||
try:
|
||||
filtred = response.filtred
|
||||
except:
|
||||
filtred = -9.0
|
||||
|
||||
AllData=FinderDbs(query,[db2,db],filtred)
|
||||
print(AllData)
|
||||
versionL="_".join([model,entrenamiento])
|
||||
#tt=time.time()
|
||||
#if identifier.classify(query)[1]< 0.3:
|
||||
#print(identifier.classify(query))
|
||||
#print(time.time()-tt)
|
||||
#return {"ids": [],"DC":[],"modelo":versionL}
|
||||
#print(time.time()-tt)
|
||||
if AllData:
|
||||
AllData = list(AllData)
|
||||
dis=[]
|
||||
id=[]
|
||||
for k,i in enumerate(AllData[0].items()):
|
||||
dis.append(str(i[1]['d']))
|
||||
id.append(i[0])
|
||||
return {"ids": id,"DC":dis,"modelo":versionL}
|
||||
|
||||
@app.post("/angela-api-claude/")
|
||||
def calculate_api_claude(response: Response):
|
||||
anthropic = Anthropic(api_key=keyanthropic)
|
||||
query = response.query
|
||||
try:
|
||||
filtred = response.filtred
|
||||
except:
|
||||
filtred = -9.0
|
||||
|
||||
AllData=FinderDbs(query,[db2,db],filtred)
|
||||
versionL="_".join([model,entrenamiento])
|
||||
if AllData:
|
||||
AllData = list(AllData)
|
||||
dis=[]
|
||||
id=[]
|
||||
for k,i in enumerate(AllData[0].items()):
|
||||
dis.append(str(i[1]['d']))
|
||||
id.append(i[0])
|
||||
if len(id)<1:
|
||||
return {"text": {"completion": "No tengo información sobre este tema",
|
||||
"model": "claude-2.1",
|
||||
"stop_reason": "stop_sequence",
|
||||
"type": "completion",
|
||||
"id": "1",
|
||||
"stop": "\n\nHuman:",
|
||||
"log_id": "1"
|
||||
},"text2": {
|
||||
"completion":"No tengo información sobre este tema",
|
||||
"model": "claude-2.1",
|
||||
"stop_reason": "stop_sequence",
|
||||
"type": "completion",
|
||||
"id": "1",
|
||||
"stop": "\n\nHuman:",
|
||||
"log_id": "1"
|
||||
}
|
||||
}
|
||||
pathsqlite="/opt/web2py/applications/MotorAngela/databases/storage.sqlite"
|
||||
con = sqlite3.connect(pathsqlite)
|
||||
copies_df = pd.read_sql_query("SELECT * from copies WHERE intentionality IS NOT NULL", con)
|
||||
copie = copies_df[copies_df["id"]==id[0]]["copy_message"].values[0]
|
||||
promptF=f"""{HUMAN_PROMPT} Tengo un contexto por favor generame un resumen, el resumen deben ser con lenguaje amable para un publico mexicano y como si fuera una conversacion con la persona.
|
||||
"""
|
||||
promptF3=promptF+f"""
|
||||
<contexto>%s</contexto>
|
||||
{AI_PROMPT}<resumen>"""%(copie)
|
||||
completion = anthropic.completions.create(
|
||||
model="claude-2",
|
||||
max_tokens_to_sample=600,
|
||||
prompt=promptF3,
|
||||
)
|
||||
|
||||
pregunta=query
|
||||
promptFv2=f"""Tu eres un asistente de IA en chatbot llamado Angela, como asistente tu labor es ayudar a los usuarios de la pagina web de la alcaldia de puebla respondiendo sus preguntas.
|
||||
Aqui te dare las reglas que debes seguir durante la conversacion:
|
||||
<reglas>
|
||||
- Siempre te mantendras en el personaje Angela.
|
||||
- Si no estas seguro de la respuesta basada en el contexto responde el suigiente texto: "Lo siento, podrias formular la pregunta de nuevo es que no entendi tu pregunta por que soy un sistema que esta en mejora en este momento".
|
||||
- No menciones el contexto si la pregunta no puede ser contestada con el.
|
||||
- Siempres responderas de manera amable pero formal.
|
||||
</reglas>
|
||||
<contexto>
|
||||
%s
|
||||
</contexto>
|
||||
{HUMAN_PROMPT} Tengo la siguiente pregunta entre la etiqueta <pregunta></pregunta> y basandote en el contexto que esta en la etiqueta <contexto></contexto> responde la pregunta entre la etiqueta <respuesta></respuesta>:
|
||||
<pregunta>
|
||||
%s
|
||||
</pregunta>
|
||||
"""%(copie,pregunta)
|
||||
|
||||
promptF3v2=promptFv2+f"""
|
||||
{AI_PROMPT}<respuesta>"""
|
||||
completionv2 = anthropic.completions.create(
|
||||
model="claude-2.1",
|
||||
max_tokens_to_sample=600,
|
||||
prompt=promptF3v2,
|
||||
)
|
||||
return {"text":completion,"text2":completionv2}
|
||||
|
||||
|
||||
|
448
metrics.py
448
metrics.py
|
@ -1,448 +0,0 @@
|
|||
|
||||
from langchain.document_loaders import DataFrameLoader
|
||||
from langchain.embeddings import HuggingFaceEmbeddings
|
||||
from langchain.vectorstores import FAISS
|
||||
from langchain.pydantic_v1 import BaseModel
|
||||
from langchain.schema.embeddings import Embeddings
|
||||
from sentence_transformers import SentenceTransformer
|
||||
from scipy.spatial import distance
|
||||
from typing import List
|
||||
import sqlite3
|
||||
import pandas as pd
|
||||
import shutil
|
||||
import re
|
||||
import numpy as np
|
||||
import inspect
|
||||
import time
|
||||
from unidecode import unidecode
|
||||
from nltk.corpus import stopwords
|
||||
import seaborn as sns
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("-f", "--file", help="Nombre de archivo a procesar")
|
||||
parser.add_argument("-d", "--distance", default="distance")
|
||||
parser.add_argument("-m", "--models", default="All")
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
# if args.file:
|
||||
# print ("El nombre de archivo a procesar es: ", )
|
||||
class CustomEmbedding(Embeddings, BaseModel,):
|
||||
"""embedding model with preprocessing"""
|
||||
def _get_embedding(self,text) -> List[float]:
|
||||
#print(text,"text")
|
||||
text=remove_unwanted(text,punctuationOK=True,stopOK=True)
|
||||
Sal=emb.encode(text)
|
||||
return Sal
|
||||
def embed_documents(self, texts: List[str]) -> List[List[float]]:
|
||||
Sal=[]
|
||||
for text in texts:
|
||||
Sal.append(self._get_embedding(text))
|
||||
|
||||
return Sal
|
||||
def embed_query(self, text: str) -> List[float]:
|
||||
return self._get_embedding(text)
|
||||
|
||||
def remove_emoji(string):
|
||||
emoji_pattern = re.compile("["
|
||||
u"\U0001F600-\U0001F64F" # emoticons
|
||||
u"\U0001F300-\U0001F5FF" # symbols & pictographs
|
||||
u"\U0001F680-\U0001F6FF" # transport & map symbols
|
||||
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
|
||||
u"\U00002702-\U000027B0"
|
||||
u"\U000024C2-\U0001F251"
|
||||
"]+", flags=re.UNICODE)
|
||||
return emoji_pattern.sub(r' ', string)
|
||||
|
||||
def remove_unwanted(document,stopOK=False,punctuationOK=False,xtrasOK=False, emojiOk=False, unidecodeOK=False):
|
||||
if punctuationOK:
|
||||
# remove punctuation
|
||||
for sig in [".",",","!","¿","?","=","(",")"]:
|
||||
document=document.replace(sig," ")
|
||||
|
||||
if xtrasOK:
|
||||
# remove user mentions
|
||||
document = re.sub("@[A-Za-z0-9_]+"," ", document)
|
||||
# remove URLS
|
||||
document = re.sub(r'http\S+', ' ', document)
|
||||
# remove hashtags
|
||||
document = re.sub("#[A-Za-z0-9_]+","", document)
|
||||
if emojiOk:
|
||||
# remove emoji's
|
||||
document = remove_emoji(document)
|
||||
|
||||
#document = re.sub("[^0-9A-Za-z ]", "" , document)
|
||||
# remove double spaces
|
||||
#print(document)
|
||||
if unidecodeOK:
|
||||
document=unidecode(document)
|
||||
|
||||
|
||||
if stopOK:
|
||||
words=document.split(" ")
|
||||
stop_words = set(stopwords.words('spanish'))
|
||||
words = [w for w in words if not w in stop_words]
|
||||
document=" ".join(words)
|
||||
|
||||
|
||||
|
||||
document = document.replace(' ',"")
|
||||
#print(document)
|
||||
return document.strip().lower()
|
||||
|
||||
def loadmodelEmb(model_name = "embeddings/all-MiniLM-L6-v2",model_kwargs = {'device': 'cpu'}):
|
||||
st = SentenceTransformer(model_name)
|
||||
return st
|
||||
|
||||
|
||||
def loadCopysAndData(pathsqlite="motor.sqlite"):
|
||||
con = sqlite3.connect(pathsqlite)
|
||||
copies_df = pd.read_sql_query("SELECT * from copies", con)
|
||||
copiesT = copies_df[copies_df.copy_start =="T"]
|
||||
copiesT=copiesT[["copy_message","id","name"]]
|
||||
data = copiesT
|
||||
B=DataFrameLoader(data,page_content_column="copy_message")
|
||||
B2=DataFrameLoader(data,page_content_column="name")
|
||||
documents=B.load()
|
||||
documents2=B2.load()
|
||||
return documents,documents2
|
||||
def makeFaissdb(documents,folder_path,embedding):
|
||||
try:
|
||||
shutil.rmtree(folder_path)
|
||||
except:
|
||||
pass
|
||||
db = FAISS.from_documents(documents, embedding)
|
||||
FAISS.save_local(db,folder_path=folder_path)
|
||||
return [db,folder_path]
|
||||
|
||||
def FinderDbs(query,dbs,filtred=False,th=1.2):
|
||||
AllData={}
|
||||
for dbt in dbs:
|
||||
Sal = dbt.similarity_search_with_score(query,4)
|
||||
for output in Sal:
|
||||
if output[0].metadata["id"] in AllData.keys():
|
||||
AllData[output[0].metadata["id"]]["d"]=min([AllData[output[0].metadata["id"]]["d"]-0.1,output[1]-0.1])
|
||||
else:
|
||||
AllData[output[0].metadata["id"]]={"d":output[1],"page_content":output[0].page_content}
|
||||
#for item in AllData.items():
|
||||
# print(item)
|
||||
|
||||
if filtred:
|
||||
filtredData={}
|
||||
for row in AllData.keys():
|
||||
if AllData[row]["d"]<1.2:
|
||||
filtredData[row]=AllData[row]
|
||||
filtredData=dict(sorted(filtredData.items(), key=lambda item: item[1]["d"]))
|
||||
return filtredData,filtredData.keys()
|
||||
|
||||
|
||||
else:
|
||||
AllData=dict(sorted(AllData.items(), key=lambda item: item[1]["d"]))
|
||||
return AllData,AllData.keys()
|
||||
if args.models=="All":
|
||||
models=["all-MiniLM-L12-v2","paraphrase-MiniLM-L3-v2" , "all-MiniLM-L6-v2","all-mpnet-base-v2","multi-qa-mpnet-base-dot-v1"]
|
||||
else:
|
||||
models=["embeddings/all-mpnet-base-v2","Finetuning/embeddings/all-mpnet-base-v2"]
|
||||
|
||||
queries_bacheo=["Quiero reportar un bacheo",
|
||||
"reportar un bache en mi comunidad",
|
||||
"¿Como reporto un bacheo en mi comunidad?",
|
||||
"Quiero informar sobre un hoyo en la calle cerca de mi hogar.",
|
||||
"Necesito reportar un bache en la vía cercana a mi residencia.",
|
||||
"Estoy preocupado por un hueco en la carretera que está cerca de donde vivo.",
|
||||
"Me gustaría notificar sobre un desnivel en la carretera en las inmediaciones de mi domicilio.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi casa.",
|
||||
"Estoy interesado en denunciar una irregularidad en la calle cercana a mi vivienda.",
|
||||
"Necesito dar aviso sobre un problema en la carretera próxima a mi residencia.",
|
||||
"Estoy observando un inconveniente en la carretera cerca de donde vivo y quisiera reportarlo.",
|
||||
"Me gustaría informar sobre un obstáculo en la vía que está cerca de mi casa.",
|
||||
"Quiero señalar un desperfecto en la carretera cercana a mi hogar.",
|
||||
"Necesito poner en conocimiento de las autoridades un bache en la calle adyacente a mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades viales para solucionar un problema en la vía cerca de mi vivienda.",
|
||||
"Me gustaría expresar mi preocupación acerca de un bache en la carretera que está cerca de donde resido.",
|
||||
"Quiero dejar constancia de un deterioro en la calle cercana a mi casa.",
|
||||
"Estoy interesado en informar sobre un desperfecto vial en la carretera cercana a mi hogar.",
|
||||
"Necesito notificar sobre un agujero en la carretera que conduce a mi residencia.",
|
||||
"Me gustaría alertar sobre un bache en la vía cerca de mi hogar.",
|
||||
"Quiero dar aviso sobre un desnivel en la calle próxima a mi vivienda.",
|
||||
"Estoy buscando reportar un problema vial en la carretera cercana a mi casa.",
|
||||
"Necesito informar sobre un obstáculo en la vía que está cerca de mi domicilio.",
|
||||
"Me gustaría señalar una irregularidad en la carretera adyacente a mi residencia.",
|
||||
"Quiero presentar una queja sobre un desperfecto en la calle cercana a mi hogar.",
|
||||
"Estoy interesado en denunciar un socavón en la vía que conduce a mi casa.",
|
||||
"Necesito notificar sobre un inconveniente en la carretera próxima a mi residencia.",
|
||||
"Me gustaría informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi casa.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
|
||||
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
|
||||
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
|
||||
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
|
||||
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
|
||||
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
|
||||
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
|
||||
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
|
||||
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
|
||||
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
|
||||
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
|
||||
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
|
||||
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
|
||||
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
|
||||
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia."
|
||||
]
|
||||
|
||||
|
||||
# for model in models:
|
||||
# emb=loadmodelEmb(model_name = model)
|
||||
# emb2=CustomEmbedding()
|
||||
# #print(inspect.getsource(HuggingFaceEmbeddings))
|
||||
# documents,documents2=loadCopysAndData()
|
||||
# db=makeFaissdb(documents,"TCopies",emb2)
|
||||
# db2=makeFaissdb(documents2,"Tnames",emb2)
|
||||
# for Fdb in [db,db2]:
|
||||
|
||||
|
||||
|
||||
# for query in queries:
|
||||
# point=0
|
||||
# AllData=FinderDbs(query,[Fdb[0]])
|
||||
# print(model)
|
||||
# print(Fdb[1])
|
||||
# if 32 in AllData[1]:
|
||||
# point+=1
|
||||
# if 32 == list(AllData[1])[0]:
|
||||
# point+=9
|
||||
# print(AllData[1],point)
|
||||
|
||||
|
||||
queries_Categoricos={
|
||||
"formas_de_reportar_bache": [
|
||||
"Quiero informar sobre un hoyo en la calle cerca de mi hogar.",
|
||||
"Necesito reportar un bache en la vía cercana a mi residencia.",
|
||||
"Estoy preocupado por un hueco en la carretera que está cerca de donde vivo.",
|
||||
"Me gustaría notificar sobre un desnivel en la carretera en las inmediaciones de mi domicilio.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi casa.",
|
||||
"Estoy interesado en denunciar una irregularidad en la calle cercana a mi vivienda.",
|
||||
"Necesito dar aviso sobre un problema en la carretera próxima a mi residencia.",
|
||||
"Estoy observando un inconveniente en la carretera cerca de donde vivo y quisiera reportarlo.",
|
||||
"Me gustaría informar sobre un obstáculo en la vía que está cerca de mi casa.",
|
||||
"Quiero señalar un desperfecto en la carretera cercana a mi hogar.",
|
||||
"Necesito poner en conocimiento de las autoridades un bache en la calle adyacente a mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades viales para solucionar un problema en la vía cerca de mi vivienda.",
|
||||
"Me gustaría expresar mi preocupación acerca de un bache en la carretera que está cerca de donde resido.",
|
||||
"Quiero dejar constancia de un deterioro en la calle cercana a mi casa.",
|
||||
"Estoy interesado en informar sobre un desperfecto vial en la carretera cercana a mi hogar.",
|
||||
"Necesito notificar sobre un agujero en la carretera que conduce a mi residencia.",
|
||||
"Me gustaría alertar sobre un bache en la vía cerca de mi hogar.",
|
||||
"Quiero dar aviso sobre un desnivel en la calle próxima a mi vivienda.",
|
||||
"Estoy buscando reportar un problema vial en la carretera cercana a mi casa.",
|
||||
"Necesito informar sobre un obstáculo en la vía que está cerca de mi domicilio.",
|
||||
"Me gustaría señalar una irregularidad en la carretera adyacente a mi residencia.",
|
||||
"Quiero presentar una queja sobre un desperfecto en la calle cercana a mi hogar.",
|
||||
"Estoy interesado en denunciar un socavón en la vía que conduce a mi casa.",
|
||||
"Necesito notificar sobre un inconveniente en la carretera próxima a mi residencia.",
|
||||
"Me gustaría informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi casa.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
|
||||
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
|
||||
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
|
||||
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
|
||||
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
|
||||
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
|
||||
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
|
||||
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
|
||||
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
|
||||
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
|
||||
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
|
||||
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
|
||||
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
|
||||
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
|
||||
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
|
||||
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
|
||||
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
|
||||
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
|
||||
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia."
|
||||
],
|
||||
"formas_de_preguntar_agenda_cultural_puebla": [
|
||||
"¿Me podrías proporcionar información sobre los eventos culturales en Puebla?",
|
||||
"Quiero estar al tanto de lo que está pasando en la escena cultural de Puebla.",
|
||||
"¿Dónde puedo encontrar detalles sobre las actividades culturales en Puebla?",
|
||||
"Estoy interesado en saber qué eventos culturales hay en Puebla.",
|
||||
"Me gustaría conocer la programación cultural de Puebla.",
|
||||
"¿Puedes decirme cuáles son los eventos culturales próximos en Puebla?",
|
||||
"Estoy buscando información sobre la oferta cultural en Puebla.",
|
||||
"¿Dónde puedo obtener información sobre la vida cultural de Puebla?",
|
||||
"Estoy buscando recomendaciones sobre eventos culturales en Puebla.",
|
||||
"¿Qué está pasando en el ámbito cultural en Puebla?",
|
||||
"Me gustaría estar al tanto de los eventos culturales en Puebla.",
|
||||
"¿Puedes proporcionarme la agenda de la cultura en Puebla?",
|
||||
"Quiero saber cuáles son las propuestas culturales en Puebla.",
|
||||
"¿Cuáles son los eventos culturales destacados en Puebla?",
|
||||
"Estoy interesado en la escena cultural de Puebla, ¿dónde puedo encontrar información?",
|
||||
"¿Dónde puedo consultar los eventos culturales que se celebrarán en Puebla?",
|
||||
"Necesito saber qué actividades culturales puedo disfrutar en Puebla.",
|
||||
"¿Me puedes indicar los acontecimientos culturales en Puebla?",
|
||||
"Quiero informarme acerca de la oferta cultural de Puebla.",
|
||||
"¿Dónde puedo obtener un listado de los eventos culturales en Puebla?",
|
||||
"Estoy buscando información sobre la vida artística en Puebla.",
|
||||
"¿Qué opciones culturales hay disponibles en Puebla en estos momentos?",
|
||||
"Me gustaría conocer los eventos culturales previstos en Puebla.",
|
||||
"¿Puedes recomendarme actividades culturales en Puebla?",
|
||||
"Quiero enterarme de las novedades culturales de Puebla.",
|
||||
"¿Cuál es la agenda de eventos culturales en Puebla?",
|
||||
"Estoy interesado en asistir a eventos culturales en Puebla, ¿dónde puedo encontrar información?",
|
||||
"¿Dónde puedo consultar la programación cultural actual de Puebla?",
|
||||
"Necesito saber cuáles son las propuestas culturales más recientes en Puebla.",
|
||||
"¿Me puedes decir qué eventos culturales están en marcha en Puebla?",
|
||||
"Estoy buscando opciones para disfrutar de la cultura en Puebla.",
|
||||
"¿Qué actividades culturales se ofrecen en Puebla en este momento?",
|
||||
"Me gustaría estar al tanto de los espectáculos culturales en Puebla.",
|
||||
"¿Puedes proporcionarme información sobre los eventos culturales próximos en Puebla?",
|
||||
"Quiero saber qué está pasando en la escena cultural de Puebla.",
|
||||
"¿Cuál es la oferta cultural actual en Puebla?",
|
||||
"Estoy interesado en conocer los eventos culturales destacados de Puebla.",
|
||||
"¿Dónde puedo encontrar la programación cultural más completa de Puebla?",
|
||||
"Necesito detalles sobre la agenda cultural de Puebla.",
|
||||
"¿Me podrías decir cuáles son las opciones culturales en Puebla en estos días?",
|
||||
"Quiero informarme sobre los eventos culturales que no me puedo perder en Puebla.",
|
||||
"¿Puedes recomendarme eventos culturales en Puebla?",
|
||||
"Estoy buscando información sobre la agenda cultural y artística de Puebla."
|
||||
],
|
||||
"formas_de_solicitar_informacion_musica": [
|
||||
"Estoy interesado en obtener datos sobre talleres de música.",
|
||||
"Necesito información acerca de cursos de música.",
|
||||
"Quiero conocer más sobre talleres de formación musical.",
|
||||
"¿Puede proporcionarme detalles sobre programas de música?",
|
||||
"Me gustaría recibir información sobre clases de música.",
|
||||
"Estoy buscando datos acerca de talleres para aprender música.",
|
||||
"¿Puede darme detalles sobre cursos de instrucción musical?",
|
||||
"Quiero saber más sobre oportunidades de aprendizaje musical.",
|
||||
"Estoy interesado en talleres para desarrollar habilidades musicales.",
|
||||
"Necesito información sobre clases prácticas de música.",
|
||||
"¿Puede brindarme datos sobre programas de formación musical?",
|
||||
"Me gustaría conocer opciones para aprender música.",
|
||||
"Estoy en busca de talleres musicales, ¿puede ayudarme?",
|
||||
"Quiero obtener detalles sobre cursos de música disponibles.",
|
||||
"Necesito información sobre talleres de instrucción musical.",
|
||||
"¿Puede proporcionarme datos sobre clases para músicos?",
|
||||
"Me gustaría saber más sobre oportunidades de formación musical.",
|
||||
"Estoy interesado en aprender música, ¿puede orientarme?",
|
||||
"Quiero conocer más sobre talleres para mejorar en música.",
|
||||
"Necesito información sobre programas de capacitación musical.",
|
||||
"¿Puede darme detalles sobre cursos de formación en música?",
|
||||
"Estoy buscando opciones para aprender a tocar instrumentos.",
|
||||
"Me gustaría recibir información sobre clases de educación musical.",
|
||||
"Estoy interesado en talleres de música, ¿puede asesorarme?",
|
||||
"Quiero obtener datos sobre oportunidades de estudio musical.",
|
||||
"Necesito información sobre talleres de música en mi área.",
|
||||
"¿Puede proporcionarme detalles sobre cursos de música locales?",
|
||||
"Me gustaría saber más sobre clases de música para principiantes.",
|
||||
"Estoy en busca de talleres de formación musical asequibles.",
|
||||
"Quiero conocer opciones para mejorar mis habilidades musicales.",
|
||||
"Estoy interesado en aprender música de manera profesional.",
|
||||
"Necesito información sobre talleres de música para niños.",
|
||||
"¿Puede darme datos sobre cursos de música para adultos?",
|
||||
"Me gustaría recibir información sobre clases de canto.",
|
||||
"Estoy buscando oportunidades de instrucción musical avanzada.",
|
||||
"Quiero obtener detalles sobre talleres de producción musical.",
|
||||
"Necesito información sobre programas de educación musical en línea.",
|
||||
"¿Puede proporcionarme detalles sobre cursos de música en vivo?",
|
||||
"Me gustaría saber más sobre clases de composición musical.",
|
||||
"Estoy interesado en talleres de música clásica.",
|
||||
"Quiero conocer opciones para estudiar teoría musical.",
|
||||
"Necesito información sobre talleres de música contemporánea.",
|
||||
"¿Puede darme datos sobre cursos de improvisación musical?",
|
||||
"Me gustaría recibir información sobre clases de jazz.",
|
||||
"Estoy buscando oportunidades de formación en música electrónica.",
|
||||
"Quiero obtener detalles sobre talleres de guitarra.",
|
||||
"Necesito información sobre programas de educación musical para la infancia.",
|
||||
"¿Puede proporcionarme detalles sobre cursos de producción de música electrónica?",
|
||||
"Me gustaría saber más sobre clases de música para adultos mayores.",
|
||||
"Estoy interesado en talleres de música étnica y world music."
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
copies_text=["Saber agenda cultural de Puebla",
|
||||
"Información de talleres de musica",
|
||||
"Informacion de talleres de danza urbana",
|
||||
"Obtener uso de suelo",
|
||||
"Reportar un bacheo.",
|
||||
"Informacion general de parquimetros",
|
||||
"Informacion Parque Benito Juárez"
|
||||
]
|
||||
|
||||
def plotVioin(Sal,Listqueries):
|
||||
NewData=pd.DataFrame.from_dict(Sal)
|
||||
|
||||
plt=sns.violinplot(data=NewData, x="model", y="distance", hue="copy_test",fill=False,inner=None,width=0.5)
|
||||
|
||||
plt.set_xticklabels(plt.get_xticklabels(), rotation=45,horizontalalignment='right')
|
||||
|
||||
fig=plt.get_figure()
|
||||
fig.set_size_inches(17.7, 12.27)
|
||||
fig.savefig('sns_violin_plot%s.png'%(Listqueries), dpi=300)
|
||||
NewData.to_csv("NewData%s.csv"%(Listqueries))
|
||||
def plotViointime(Sal,Listqueries):
|
||||
NewData=pd.DataFrame.from_dict(Sal)
|
||||
|
||||
plt=sns.violinplot(data=NewData, x="model", y="time",fill=False,inner=None,width=0.5)
|
||||
|
||||
plt.set_xticklabels(plt.get_xticklabels(), rotation=45,horizontalalignment='right')
|
||||
|
||||
fig=plt.get_figure()
|
||||
fig.set_size_inches(17.7, 12.27)
|
||||
fig.savefig('sns_violin_plot_time%s.png'%(Listqueries), dpi=300)
|
||||
NewData.to_csv("NewData%s.csv"%(Listqueries))
|
||||
def queries_CatPlot(Listqueries):
|
||||
Sal=[]
|
||||
queries=queries_Categoricos[Listqueries]
|
||||
for model in models:
|
||||
for copy_text in copies_text:
|
||||
global emb
|
||||
emb=loadmodelEmb(model_name = model)
|
||||
emb2=CustomEmbedding()
|
||||
emb2.embed_query("test 123321")
|
||||
sal=[]
|
||||
for query in queries:
|
||||
t=time.time()
|
||||
A={"model":model,
|
||||
"query":query,
|
||||
"copy_test":copy_text,
|
||||
"distance":distance.cosine(emb2.embed_query(query),emb2.embed_query(copy_text)),
|
||||
"time":time.time()-t
|
||||
}
|
||||
Sal.append(A)
|
||||
if args.distance=="distance":
|
||||
plotVioin(Sal,Listqueries)
|
||||
if args.distance=="time":
|
||||
plotViointime(Sal,Listqueries)
|
||||
|
||||
|
||||
|
||||
queries_CatPlot(args.file)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,62 +1,88 @@
|
|||
aiofiles==23.2.1
|
||||
aiohttp==3.8.5
|
||||
aiosignal==1.3.1
|
||||
altair==5.1.2
|
||||
altair==5.1.1
|
||||
annotated-types==0.5.0
|
||||
anyio==3.7.1
|
||||
async-timeout==4.0.3
|
||||
attrs==23.1.0
|
||||
beautifulsoup4==4.12.2
|
||||
certifi==2023.7.22
|
||||
chardet==5.2.0
|
||||
charset-normalizer==3.2.0
|
||||
clean-text==0.4.0
|
||||
click==8.1.7
|
||||
cmake==3.27.5
|
||||
contourpy==1.1.1
|
||||
cycler==0.12.0
|
||||
dataclasses-json==0.6.1
|
||||
cycler==0.11.0
|
||||
dataclasses-json==0.6.0
|
||||
emoji==2.8.0
|
||||
exceptiongroup==1.1.3
|
||||
faiss-cpu==1.7.4
|
||||
fastapi==0.103.2
|
||||
fastapi==0.103.1
|
||||
ffmpy==0.3.1
|
||||
filelock==3.12.4
|
||||
fonttools==4.43.0
|
||||
filetype==1.2.0
|
||||
fonttools==4.42.1
|
||||
frozenlist==1.4.0
|
||||
fsspec==2023.9.2
|
||||
fsspec==2023.9.1
|
||||
ftfy==6.1.1
|
||||
gpt4all==1.0.12
|
||||
gradio==3.44.4
|
||||
gradio_client==0.5.1
|
||||
greenlet==2.0.2
|
||||
h11==0.14.0
|
||||
httpcore==0.18.0
|
||||
httptools==0.6.0
|
||||
httpx==0.25.0
|
||||
huggingface-hub==0.17.3
|
||||
huggingface-hub==0.17.2
|
||||
idna==3.4
|
||||
importlib-metadata==6.8.0
|
||||
importlib-resources==6.1.0
|
||||
Jinja2==3.1.2
|
||||
joblib==1.3.2
|
||||
jsonpatch==1.33
|
||||
jsonpointer==2.4
|
||||
jsonschema==4.19.1
|
||||
jsonschema-specifications==2023.7.1
|
||||
kiwisolver==1.4.5
|
||||
langchain==0.0.304
|
||||
langsmith==0.0.41
|
||||
lit==17.0.1
|
||||
langchain==0.0.297
|
||||
langsmith==0.0.38
|
||||
lit==16.0.6
|
||||
lxml==4.9.3
|
||||
Markdown==3.4.4
|
||||
MarkupSafe==2.1.3
|
||||
marshmallow==3.20.1
|
||||
matplotlib==3.8.0
|
||||
matplotlib==3.7.3
|
||||
mpmath==1.3.0
|
||||
multidict==6.0.4
|
||||
mypy-extensions==1.0.0
|
||||
networkx==3.1
|
||||
nltk==3.8.1
|
||||
numexpr==2.8.7
|
||||
numpy==1.26.0
|
||||
numexpr==2.8.6
|
||||
numpy==1.24.4
|
||||
nvidia-cublas-cu11==11.10.3.66
|
||||
nvidia-cuda-cupti-cu11==11.7.101
|
||||
nvidia-cuda-nvrtc-cu11==11.7.99
|
||||
nvidia-cuda-runtime-cu11==11.7.99
|
||||
nvidia-cudnn-cu11==8.5.0.96
|
||||
nvidia-cufft-cu11==10.9.0.58
|
||||
nvidia-curand-cu11==10.2.10.91
|
||||
nvidia-cusolver-cu11==11.4.0.1
|
||||
nvidia-cusparse-cu11==11.7.4.91
|
||||
nvidia-nccl-cu11==2.14.3
|
||||
nvidia-nvtx-cu11==11.7.91
|
||||
orjson==3.9.7
|
||||
packaging==23.1
|
||||
pandas==2.1.1
|
||||
pandas==2.0.3
|
||||
Pillow==10.0.1
|
||||
pydantic==2.4.2
|
||||
pydantic_core==2.10.1
|
||||
pkgutil_resolve_name==1.3.10
|
||||
pydantic==2.3.0
|
||||
pydantic_core==2.6.3
|
||||
pydub==0.25.1
|
||||
pyparsing==3.1.1
|
||||
python-dateutil==2.8.2
|
||||
python-dotenv==1.0.0
|
||||
python-iso639==2023.6.15
|
||||
python-magic==0.4.27
|
||||
python-multipart==0.0.6
|
||||
pytz==2023.3.post1
|
||||
PyYAML==6.0.1
|
||||
|
@ -65,17 +91,18 @@ regex==2023.8.8
|
|||
requests==2.31.0
|
||||
rpds-py==0.10.3
|
||||
safetensors==0.3.3
|
||||
scikit-learn==1.3.1
|
||||
scipy==1.11.3
|
||||
seaborn==0.13.0
|
||||
scikit-learn==1.3.0
|
||||
scipy==1.10.1
|
||||
semantic-version==2.10.0
|
||||
sentence-transformers==2.2.2
|
||||
sentencepiece==0.1.99
|
||||
six==1.16.0
|
||||
sniffio==1.3.0
|
||||
soupsieve==2.5
|
||||
SQLAlchemy==2.0.21
|
||||
starlette==0.27.0
|
||||
sympy==1.12
|
||||
tabulate==0.9.0
|
||||
tenacity==8.2.3
|
||||
threadpoolctl==3.2.0
|
||||
tokenizers==0.13.3
|
||||
|
@ -83,13 +110,18 @@ toolz==0.12.0
|
|||
torch==2.0.1
|
||||
torchvision==0.15.2
|
||||
tqdm==4.66.1
|
||||
transformers==4.33.3
|
||||
transformers==4.33.2
|
||||
triton==2.0.0
|
||||
typing-inspect==0.9.0
|
||||
typing_extensions==4.8.0
|
||||
tzdata==2023.3
|
||||
Unidecode==1.3.7
|
||||
Unidecode==1.3.6
|
||||
unstructured==0.10.16
|
||||
urllib3==2.0.5
|
||||
uvicorn==0.23.2
|
||||
uvloop==0.17.0
|
||||
watchfiles==0.20.0
|
||||
wcwidth==0.2.6
|
||||
websockets==11.0.3
|
||||
yarl==1.9.2
|
||||
zipp==3.17.0
|
||||
|
|
|
@ -1,191 +0,0 @@
|
|||
aiofiles==23.2.1
|
||||
aiohttp==3.8.6
|
||||
aiosignal==1.3.1
|
||||
alembic==1.12.1
|
||||
altair==5.1.2
|
||||
annotated-types==0.6.0
|
||||
antlr4-python3-runtime==4.9.3
|
||||
anyio==3.7.1
|
||||
asteroid-filterbanks==0.4.0
|
||||
async-timeout==4.0.3
|
||||
attrs==23.1.0
|
||||
audioread==3.0.1
|
||||
cachetools==5.3.2
|
||||
certifi==2023.7.22
|
||||
cffi==1.16.0
|
||||
charset-normalizer==3.3.1
|
||||
click==8.1.7
|
||||
cmake==3.27.7
|
||||
colorama==0.4.6
|
||||
coloredlogs==15.0.1
|
||||
colorlog==6.7.0
|
||||
contourpy==1.1.1
|
||||
cycler==0.12.1
|
||||
dataclasses-json==0.6.1
|
||||
datasets==2.14.6
|
||||
decorator==5.1.1
|
||||
dill==0.3.7
|
||||
docopt==0.6.2
|
||||
einops==0.7.0
|
||||
faiss-cpu==1.7.4
|
||||
fastapi==0.104.0
|
||||
ffmpy==0.3.1
|
||||
filelock==3.12.4
|
||||
flatbuffers==23.5.26
|
||||
fonttools==4.43.1
|
||||
frozenlist==1.4.0
|
||||
fsspec==2023.10.0
|
||||
google-api-core==2.12.0
|
||||
google-auth==2.23.4
|
||||
google-cloud==0.34.0
|
||||
google-cloud-speech==2.22.0
|
||||
googleapis-common-protos==1.61.0
|
||||
gradio==3.46.1
|
||||
gradio_client==0.5.3
|
||||
greenlet==3.0.1
|
||||
grpcio==1.59.2
|
||||
grpcio-status==1.59.2
|
||||
h11==0.14.0
|
||||
httpcore==0.18.0
|
||||
httptools==0.6.0
|
||||
httpx==0.25.0
|
||||
huggingface-hub==0.17.3
|
||||
humanfriendly==10.0
|
||||
HyperPyYAML==1.2.2
|
||||
idna==3.4
|
||||
importlib-resources==6.1.0
|
||||
Jinja2==3.1.2
|
||||
joblib==1.3.2
|
||||
jsonpatch==1.33
|
||||
jsonpointer==2.4
|
||||
jsonschema==4.19.1
|
||||
jsonschema-specifications==2023.7.1
|
||||
julius==0.2.7
|
||||
kiwisolver==1.4.5
|
||||
langchain==0.0.304
|
||||
langsmith==0.0.41
|
||||
lazy_loader==0.3
|
||||
librosa==0.10.1
|
||||
lightning==2.1.0
|
||||
lightning-utilities==0.9.0
|
||||
lit==17.0.3
|
||||
llvmlite==0.41.1
|
||||
Mako==1.2.4
|
||||
Markdown==3.4.4
|
||||
markdown-it-py==3.0.0
|
||||
MarkupSafe==2.1.2
|
||||
marshmallow==3.20.1
|
||||
matplotlib==3.8.0
|
||||
mdurl==0.1.2
|
||||
more-itertools==10.1.0
|
||||
mpmath==1.3.0
|
||||
msgpack==1.0.7
|
||||
multidict==6.0.4
|
||||
multiprocess==0.70.15
|
||||
mypy-extensions==1.0.0
|
||||
networkx==3.0
|
||||
nltk==3.8.1
|
||||
numba==0.58.1
|
||||
numexpr==2.8.7
|
||||
numpy==1.26.1
|
||||
nvidia-cublas-cu11==11.10.3.66
|
||||
nvidia-cuda-cupti-cu11==11.7.101
|
||||
nvidia-cuda-nvrtc-cu11==11.7.99
|
||||
nvidia-cuda-runtime-cu11==11.7.99
|
||||
nvidia-cudnn-cu11==8.5.0.96
|
||||
nvidia-cufft-cu11==10.9.0.58
|
||||
nvidia-curand-cu11==10.2.10.91
|
||||
nvidia-cusolver-cu11==11.4.0.1
|
||||
nvidia-cusparse-cu11==11.7.4.91
|
||||
nvidia-nccl-cu11==2.14.3
|
||||
nvidia-nvtx-cu11==11.7.91
|
||||
omegaconf==2.3.0
|
||||
onnxruntime-gpu==1.16.1
|
||||
openai-whisper==20230918
|
||||
optuna==3.4.0
|
||||
orjson==3.9.7
|
||||
packaging==23.2
|
||||
pandas==2.1.1
|
||||
pika==1.3.2
|
||||
Pillow==9.3.0
|
||||
platformdirs==3.11.0
|
||||
pooch==1.8.0
|
||||
primePy==1.3
|
||||
proto-plus==1.22.3
|
||||
protobuf==4.24.4
|
||||
pyannote.audio==3.0.1
|
||||
pyannote.core==5.0.0
|
||||
pyannote.database==5.0.1
|
||||
pyannote.metrics==3.2.1
|
||||
pyannote.pipeline==3.0.1
|
||||
pyarrow==13.0.0
|
||||
pyasn1==0.5.0
|
||||
pyasn1-modules==0.3.0
|
||||
pycparser==2.21
|
||||
pydantic==2.4.2
|
||||
pydantic_core==2.10.1
|
||||
pydub==0.25.1
|
||||
Pygments==2.16.1
|
||||
pyparsing==3.1.1
|
||||
python-dateutil==2.8.2
|
||||
python-dotenv==1.0.0
|
||||
python-multipart==0.0.6
|
||||
pytorch-lightning==2.1.0
|
||||
pytorch-metric-learning==2.3.0
|
||||
pytz==2023.3.post1
|
||||
PyYAML==6.0.1
|
||||
referencing==0.30.2
|
||||
regex==2023.10.3
|
||||
requests==2.31.0
|
||||
rich==13.6.0
|
||||
rpds-py==0.10.3
|
||||
rsa==4.9
|
||||
ruamel.yaml==0.18.2
|
||||
ruamel.yaml.clib==0.2.8
|
||||
safetensors==0.4.0
|
||||
scikit-learn==1.3.2
|
||||
scipy==1.11.3
|
||||
seaborn==0.13.0
|
||||
semantic-version==2.10.0
|
||||
semver==3.0.2
|
||||
sentence-transformers==2.2.2
|
||||
sentencepiece==0.1.99
|
||||
shellingham==1.5.4
|
||||
six==1.16.0
|
||||
sniffio==1.3.0
|
||||
sortedcontainers==2.4.0
|
||||
soundfile==0.12.1
|
||||
soxr==0.3.7
|
||||
speechbrain==0.5.15
|
||||
SQLAlchemy==2.0.22
|
||||
starlette==0.27.0
|
||||
sympy==1.12
|
||||
tabulate==0.9.0
|
||||
tenacity==8.2.3
|
||||
tensorboardX==2.6.2.2
|
||||
threadpoolctl==3.2.0
|
||||
tiktoken==0.3.3
|
||||
tokenizer==3.4.3
|
||||
tokenizers==0.14.1
|
||||
toolz==0.12.0
|
||||
torch==2.0.1
|
||||
torch-audiomentations==0.11.0
|
||||
torch-pitch-shift==1.2.4
|
||||
torchaudio==2.0.2+cpu
|
||||
torchmetrics==1.2.0
|
||||
torchvision==0.15.2
|
||||
tqdm==4.66.1
|
||||
transformers==4.34.1
|
||||
triton==2.0.0
|
||||
typer==0.9.0
|
||||
typing-inspect==0.9.0
|
||||
typing_extensions==4.8.0
|
||||
tzdata==2023.3
|
||||
Unidecode==1.3.7
|
||||
urllib3==2.0.7
|
||||
uvicorn==0.23.2
|
||||
uvloop==0.17.0
|
||||
watchfiles==0.20.0
|
||||
websockets==11.0.3
|
||||
xxhash==3.4.1
|
||||
yarl==1.9.2
|
Loading…
Reference in New Issue