iver / src /rag /generator.py
hevold's picture
Upload generator.py
093463f verified
"""
Generator module for Norwegian RAG chatbot with GPT-4o integration.
Generates responses using retrieved context and GPT-4o.
"""
from typing import List, Dict, Any, Optional
from ..api.openai_api import OpenAIAPI, create_rag_prompt
class Generator:
"""
Generates responses using retrieved context and GPT-4o.
Uses OpenAI API for text generation.
"""
def __init__(
self,
api_client: Optional[OpenAIAPI] = None,
):
"""
Initialize the generator.
Args:
api_client: OpenAIAPI client for text generation
"""
self.api_client = api_client or OpenAIAPI()
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