""" 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