Spaces:
Sleeping
Sleeping
Create llm_query.py
Browse files- llm_query.py +74 -0
llm_query.py
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import chromadb
|
3 |
+
from groq import Groq
|
4 |
+
from dotenv import load_dotenv
|
5 |
+
from chroma_setup import initialize_client
|
6 |
+
from embedding import query_chroma_db
|
7 |
+
|
8 |
+
# Carga las variables de entorno desde el archivo .env
|
9 |
+
load_dotenv()
|
10 |
+
|
11 |
+
# Inicializa el cliente de Groq con la clave de API
|
12 |
+
groq_client = Groq(api_key=os.getenv("GROQ_API_KEY"))
|
13 |
+
|
14 |
+
# Inicializa el cliente de ChromaDB
|
15 |
+
chroma_client = initialize_client()
|
16 |
+
|
17 |
+
# Verifica o crea la colecci贸n donde se guardan las incrustaciones (embeddings)
|
18 |
+
collection_name = "text_embeddings"
|
19 |
+
try:
|
20 |
+
collection = chroma_client.get_collection(name=collection_name)
|
21 |
+
except chromadb.api.segment.InvalidCollectionException:
|
22 |
+
collection = chroma_client.create_collection(name=collection_name)
|
23 |
+
|
24 |
+
def query_llm(query: str, user_id: str, document_id: str):
|
25 |
+
"""
|
26 |
+
Realiza una consulta al LLM (modelo de lenguaje) usando la informaci贸n
|
27 |
+
m谩s relevante obtenida de la base de datos ChromaDB.
|
28 |
+
|
29 |
+
Par谩metros:
|
30 |
+
-----------
|
31 |
+
query : str
|
32 |
+
Pregunta o consulta que se le har谩 al LLM.
|
33 |
+
user_id : str
|
34 |
+
Identificador 煤nico de usuario.
|
35 |
+
document_id : str
|
36 |
+
Identificador 煤nico de documento.
|
37 |
+
|
38 |
+
Retorna:
|
39 |
+
--------
|
40 |
+
str
|
41 |
+
Respuesta generada por el LLM en base al contexto encontrado.
|
42 |
+
"""
|
43 |
+
if not user_id or not document_id:
|
44 |
+
raise ValueError("Se requieren tanto user_id como document_id para realizar la consulta.")
|
45 |
+
|
46 |
+
# Consulta a la base de datos para obtener el contexto
|
47 |
+
context = query_chroma_db(user_id, document_id, query)
|
48 |
+
|
49 |
+
# Registra el contexto antes de enviarlo al LLM
|
50 |
+
print(f"Contexto para el LLM: {context}")
|
51 |
+
|
52 |
+
if not context.strip():
|
53 |
+
return "No se encontr贸 contexto para esta consulta."
|
54 |
+
|
55 |
+
prompt = f"""Eres un asistente inteligente. Basado en el siguiente contexto,
|
56 |
+
proporciona una respuesta resumida y bien interpretada a la pregunta.
|
57 |
+
Contexto: {context}
|
58 |
+
|
59 |
+
Pregunta: {query}
|
60 |
+
|
61 |
+
Por favor, ofrece una respuesta detallada y clara basada en el documento."""
|
62 |
+
|
63 |
+
chat_completion = groq_client.chat.completions.create(
|
64 |
+
messages=[
|
65 |
+
{
|
66 |
+
"role": "user",
|
67 |
+
"content": prompt,
|
68 |
+
}
|
69 |
+
],
|
70 |
+
model="llama3-8b-8192",
|
71 |
+
max_tokens=500,
|
72 |
+
)
|
73 |
+
|
74 |
+
return chat_completion.choices[0].message.content
|