Insight_DKG / llm_query.py
jeysshon's picture
Create llm_query.py
6a040f1 verified
import os
import chromadb
from groq import Groq
from dotenv import load_dotenv
from chroma_setup import initialize_client
from embedding import query_chroma_db
# Carga las variables de entorno desde el archivo .env
load_dotenv()
# Inicializa el cliente de Groq con la clave de API
groq_client = Groq(api_key=os.getenv("GROQ_API_KEY"))
# Inicializa el cliente de ChromaDB
chroma_client = initialize_client()
# Verifica o crea la colecci贸n donde se guardan las incrustaciones (embeddings)
collection_name = "text_embeddings"
try:
collection = chroma_client.get_collection(name=collection_name)
except chromadb.api.segment.InvalidCollectionException:
collection = chroma_client.create_collection(name=collection_name)
def query_llm(query: str, user_id: str, document_id: str):
"""
Realiza una consulta al LLM (modelo de lenguaje) usando la informaci贸n
m谩s relevante obtenida de la base de datos ChromaDB.
Par谩metros:
-----------
query : str
Pregunta o consulta que se le har谩 al LLM.
user_id : str
Identificador 煤nico de usuario.
document_id : str
Identificador 煤nico de documento.
Retorna:
--------
str
Respuesta generada por el LLM en base al contexto encontrado.
"""
if not user_id or not document_id:
raise ValueError("Se requieren tanto user_id como document_id para realizar la consulta.")
# Consulta a la base de datos para obtener el contexto
context = query_chroma_db(user_id, document_id, query)
# Registra el contexto antes de enviarlo al LLM
print(f"Contexto para el LLM: {context}")
if not context.strip():
return "No se encontr贸 contexto para esta consulta."
prompt = f"""Eres un asistente inteligente. Basado en el siguiente contexto,
proporciona una respuesta resumida y bien interpretada a la pregunta.
Contexto: {context}
Pregunta: {query}
Por favor, ofrece una respuesta detallada y clara basada en el documento."""
chat_completion = groq_client.chat.completions.create(
messages=[
{
"role": "user",
"content": prompt,
}
],
model="llama3-8b-8192",
max_tokens=500,
)
return chat_completion.choices[0].message.content