iver / src /rag /generator.py
hevold's picture
Upload 29 files
b34efa5 verified
raw
history blame
2.41 kB
"""
Generator module for Norwegian RAG chatbot.
Generates responses using retrieved context and LLM.
"""
from typing import List, Dict, Any, Optional
from ..api.huggingface_api import HuggingFaceAPI, create_rag_prompt
class Generator:
"""
Generates responses using retrieved context and LLM.
Uses Hugging Face Inference API for text generation.
"""
def __init__(
self,
api_client: Optional[HuggingFaceAPI] = None,
):
"""
Initialize the generator.
Args:
api_client: HuggingFaceAPI client for text generation
"""
self.api_client = api_client or HuggingFaceAPI()
def generate(
self,
query: str,
retrieved_chunks: List[Dict[str, Any]],
temperature: float = 0.7
) -> str:
"""
Generate a response using retrieved context.
Args:
query: User query
retrieved_chunks: List of retrieved chunks with metadata
temperature: Temperature for text generation
Returns:
Generated response
"""
# Extract text from retrieved chunks
context_texts = [chunk["chunk_text"] for chunk in retrieved_chunks]
# If no context is retrieved, generate a response without context
if not context_texts:
return self._generate_without_context(query, temperature)
# Create RAG prompt
prompt = create_rag_prompt(query, context_texts)
# Generate response
response = self.api_client.generate_text(
prompt=prompt,
temperature=temperature
)
return response
def _generate_without_context(self, query: str, temperature: float = 0.7) -> str:
"""
Generate a response without context when no relevant chunks are found.
Args:
query: User query
temperature: Temperature for text generation
Returns:
Generated response
"""
prompt = f"""Du er en hjelpsom assistent som svarer på norsk. Svar på følgende spørsmål så godt du kan.
SPØRSMÅL:
{query}
SVAR:
"""
response = self.api_client.generate_text(
prompt=prompt,
temperature=temperature
)
return response