|
""" |
|
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 |
|
""" |
|
|
|
context_texts = [chunk["chunk_text"] for chunk in retrieved_chunks] |
|
|
|
|
|
if not context_texts: |
|
return self._generate_without_context(query, temperature) |
|
|
|
|
|
prompt = create_rag_prompt(query, context_texts) |
|
|
|
|
|
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 |
|
|