File size: 1,921 Bytes
1c631a4
229a4d5
1c631a4
c45eea1
a5e4950
 
 
 
 
 
13f54fc
a5e4950
 
13f54fc
a5e4950
 
384c26a
a5e4950
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import logging
from groq import Groq
logger = logging.getLogger(__name__)

class Response:
    def __init__(self, api_key: str, model_name: str, encoder, system_prompt: str) -> None:
        self.api_key = api_key
        self.model_name = model_name
        self.encoder = encoder
        self.system_prompt = system_prompt
        try:
            self.client = Groq(api_key=self.api_key)
            logging.info("OpenAI client initialized.")
        except Exception as e:
            logging.critical("Failed to initialize OpenAI client as %s", e)
            self.client = None

    def generate_response(self, query: str, context: str) -> str:
        if self.client is None:
            return "Error: AI client not configured."
        prompt = f"Context:\n{context}\n\nQuestion: {query}\nAnswer:"
        try:
            response = self.client.chat.completions.create(
                messages=[
                    {
                        "role": "system",
                        "content": self.system_prompt,
                    },
                    {
                        "role": "user",
                        "content": prompt,
                    },
                ],
                temperature=1,
                top_p=1,
                model=self.model_name,
                stream=False,
            )
            # Extract text defensively (depends on SDK return shape)
            try:
                response = response.choices[0].message.content
            except Exception as e:
                response = getattr(response, "text", None) or str(response)
                logging.warning("Fallback used for response parsing as %s", e)
            logging.info("Answer generation succeeded.")
            return response
        except Exception as e:
            logging.error("Error during API call as %s", e)
            return "Sorry, there was an error generating the response."