legacydemo / src /genai.py
gupta-amulya's picture
Add initial implementation of GenAI and related components for mental health assistance
0782370
import json
import os
import google.generativeai as genai
from dotenv import load_dotenv
from pydantic import BaseModel
load_dotenv()
GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")
genai.configure(api_key=GOOGLE_API_KEY)
class OutputSchema(BaseModel):
topic: str
answer: str
def valid_output(output: dict) -> dict:
return OutputSchema(**output)
class GenAI:
def __init__(self):
self.genai_model = genai.GenerativeModel("gemini-2.0-flash-lite")
def generate_content(
self,
question: str,
question_context: str,
unique_topics: str,
few_shot_examples: str,
):
prompt = f"""
INSTRUCTIONS:
1. You are a expert assistant to mental health counselors.
2. You are given following:
2.1 Input Question: A input question from mental health counselor seeking assistance.
2.2 Input Question Context: Additional context for input question. Can be None. If available, utilize this context in your response.
2.3 Topics: Categories of topics to which any input question may belong. Any input question will be categorized to one of these topics.
2.4 Few-shot examples: Some examples
3. Output the following:
3.1 A topic from list of topics for input question.
3.2 A precise answer for the input question.
- Length of answer should not exceed 256 words.
4. Your output MUST be a VALID JSON format.
4.1 Follow the sample JSON format given below.
INPUT:
Input Question: {question}
Input Question Context: {question_context}
Topics: {unique_topics}
Few-shot examples: {few_shot_examples}
Sample output JSON format: [{{
"topic": "A topic from list of topics for input question."
"answer": "An answer for the input question."
}}]
OUTPUT:"""
response = self.genai_model.generate_content(prompt)
out = response.text
out = out[7:-3]
out = json.loads(out)
valid_response = valid_output(out[0])
return (valid_response.answer, valid_response.topic)