sinal-de-alerta / src /labdaps /chat /session.py
fabianonbfilho's picture
Upload src/labdaps/chat/session.py with huggingface_hub
6d8dc9e verified
Raw
History Blame Contribute Delete
1.51 kB
import os
from dataclasses import dataclass
from groq import Groq
from src.labdaps.config import GROQ_MODEL, MAX_HISTORY_MESSAGES
from src.labdaps.retrieval.retriever import RetrievedChunk, retrieve
from src.labdaps.ingestion.embedder import Embedder
from src.labdaps.chat.prompts import build_system_prompt
@dataclass
class ChatResponse:
text: str
sources: list[RetrievedChunk]
class ChatSession:
def __init__(self, embedder: Embedder):
self.embedder = embedder
self.client = Groq(api_key=os.environ["GROQ_API_KEY"])
self.history: list[dict] = []
def reset(self):
self.history = []
def ask(self, question: str):
chunks = retrieve(question, self.embedder)
system_prompt = build_system_prompt(chunks)
trimmed_history = self.history[-MAX_HISTORY_MESSAGES:]
messages = (
[{"role": "system", "content": system_prompt}]
+ trimmed_history
+ [{"role": "user", "content": question}]
)
full_text = ""
stream = self.client.chat.completions.create(
model=GROQ_MODEL,
messages=messages,
stream=True,
max_tokens=2048,
)
for chunk in stream:
delta = chunk.choices[0].delta.content or ""
full_text += delta
yield delta, chunks
self.history.append({"role": "user", "content": question})
self.history.append({"role": "assistant", "content": full_text})