| from openai import OpenAI |
| from utils import setup_logger |
| from config import Config |
|
|
| logger = setup_logger('response_generator') |
|
|
| class ResponseGenerator: |
| def __init__(self): |
| logger.info("Response generator initialized (Groq Llama-3 mode)") |
| |
| if not Config.GROQ_API_KEY: |
| logger.error("GROQ_API_KEY is missing.") |
| self.client = None |
| else: |
| |
| self.client = OpenAI( |
| api_key=Config.GROQ_API_KEY, |
| base_url="https://api.groq.com/openai/v1" |
| ) |
|
|
| def generate_response(self, query, relevant_docs): |
| if len(relevant_docs) == 0: |
| return "عذرًا، لم أجد أي معلومات ذات صلة في المستندات." |
|
|
| if not self.client: |
| return "عذرًا، لم يتم إعداد مفتاح API." |
|
|
| try: |
| context_text = "\n\n".join(relevant_docs['content'].tolist()) |
|
|
| system_instruction = ( |
| "أنت مساعد ذكي تتحدث العربية بطلاقة. مهمتك الإجابة بدقة بناءً على السياق فقط." |
| "إذا لم تجد الإجابة في السياق، قل 'لا تتوفر معلومات'." |
| "اجعل إجابتك رسمية، قصيرة، ومباشرة." |
| ) |
|
|
| user_message = f"السياق:\n{context_text}\n\nالسؤال: {query}" |
|
|
| response = self.client.chat.completions.create( |
| model=Config.LLM_MODEL, |
| messages=[ |
| {"role": "system", "content": system_instruction}, |
| {"role": "user", "content": user_message} |
| ], |
| temperature=0.3, |
| max_tokens=300 |
| ) |
|
|
| return response.choices[0].message.content.strip() |
|
|
| except Exception as e: |
| logger.error(f"Error generating response: {e}") |
| return "عذرًا، حدث خطأ أثناء المعالجة." |
|
|