File size: 2,409 Bytes
b34efa5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
"""
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
|