Spaces:
Sleeping
Sleeping
| import os | |
| from dotenv import load_dotenv | |
| from langchain_groq import ChatGroq | |
| from openai import OpenAI | |
| load_dotenv() | |
| class PrimaryLLMHandler: | |
| def __init__(self, model_name="gpt-4o-mini"): | |
| """ | |
| Initializes the Primary LLM Handler (GPT0-mini). | |
| """ | |
| self.openai_api_key = os.getenv("OPENAI_API_KEY") | |
| if not self.openai_api_key: | |
| raise ValueError("OPENAI_API_KEY environment variable not set.") | |
| self.client = OpenAI(api_key=self.openai_api_key) | |
| self.model_name = model_name | |
| def generate_response(self, user_prompt, data): | |
| """ | |
| Generates a response using the primary LLM. | |
| """ | |
| prompt = ( | |
| f"You are a professional AI model tasked with writing personalized invite texts " | |
| f"that are concise (less than 40 words), brochure-suitable, and tailored as per the category in the given sample." | |
| f"\n\n" | |
| f"User prompt: {user_prompt}\n\n" | |
| f"Details of the individual:\n" | |
| f"- Name: {data['Name']}\n" | |
| f"- Job Title: {data['Job Title']}\n" | |
| f"- Organisation: {data['Organisation']}\n" | |
| f"- Area of Interest: {data['Area of Interest']}\n" | |
| f"- Category: {data['Category']}\n\n" | |
| f"The response should start with 'Hello {data['Name']}'." | |
| f"Ensure the tone aligns with the instructions. STRICTLY give only one response." | |
| ) | |
| completion = self.client.chat.completions.create( | |
| model=self.model_name, | |
| messages=[ | |
| {"role": "system", "content": "You are a professional assistant AI."}, | |
| {"role": "user", "content": prompt}, | |
| ], | |
| ) | |
| return completion.choices[0].message.content.strip() | |
| class ValidatorLLMHandler: | |
| def __init__(self, model_name="gemma2-9b-it"): | |
| """ | |
| Initializes the Validator LLM Handler (Llama 3.3 8B). | |
| """ | |
| self.groq_api_key = os.getenv("GROQ_API_KEY") | |
| if not self.groq_api_key: | |
| raise ValueError("GROQ_API_KEY environment variable not set.") | |
| self.llm = ChatGroq(groq_api_key=self.groq_api_key, model_name=model_name) | |
| def validate_and_correct_response(self, user_prompt, original_response, data): | |
| """ | |
| Validates and corrects the response using the secondary LLM. | |
| """ | |
| validation_prompt = ( | |
| f"You are a professional AI model tasked with validating and correcting AI-generated texts. " | |
| f"The original response must align strictly with the provided user prompt and input details. " | |
| f"If the response fails to meet the requirements, generate a corrected version." | |
| f"\n\n" | |
| f"User prompt: {user_prompt}\n\n" | |
| f"Details of the individual:\n" | |
| f"- Name: {data['Name']}\n" | |
| f"- Job Title: {data['Job Title']}\n" | |
| f"- Organisation: {data['Organisation']}\n" | |
| f"- Area of Interest: {data['Area of Interest']}\n" | |
| f"- Category: {data['Category']}\n\n" | |
| f"Original response: {original_response}\n\n" | |
| f"Instructions:\n" | |
| f"- If the original response aligns with the user prompt and input details, reply with 'Valid Response'.\n" | |
| f"- Otherwise, provide a corrected version starting with 'Hello {data['Name']}'.\n" | |
| f"- Keep it concise (less than 40 words) and brochure-suitable.\n" | |
| ) | |
| response = self.llm.invoke(validation_prompt) | |
| return response.content.strip() | |