MAAS / app /uiux /service.py
Hammad712's picture
Added uiux Module
86992c4
from typing import Dict, Any
import os
import getpass
import logging
from app.uiux.models import Recommendation, PrioritySuggestions
from app.uiux.prompts import UIUXPrompts
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import PydanticOutputParser
logger = logging.getLogger(__name__)
class UIUXService:
"""
Service class for generating UI/UX reports and prioritized suggestions via LLM.
"""
def __init__(self):
key = os.getenv("GEMINI_API_KEY")
if not key:
key = getpass.getpass("Enter your Gemini API key: ")
self.llm = ChatGoogleGenerativeAI(
model="gemini-2.5-flash",
temperature=0,
api_key=key
)
# Report prompt template
self.report_prompt = ChatPromptTemplate.from_messages([
("system", UIUXPrompts.REPORT_PROMPT),
("human", "Please generate a comprehensive UI/UX audit report based on the following data:\n\n{uiux_data}")
])
# Priority suggestions parser
self.parser = PydanticOutputParser(pydantic_object=Recommendation)
self.priority_chain = (
ChatPromptTemplate.from_messages([
("system", UIUXPrompts.SYSTEM_PROMPT),
("human", "{report}")
]).partial(format_instructions=self.parser.get_format_instructions())
| self.llm
| self.parser
)
def generate_uiux_report(self, uiux_data: Dict[str, Any]) -> str:
logger.info("Generating UI/UX report via LLM...")
prompt_input = {"uiux_data": uiux_data}
response = self.report_prompt | self.llm
result = response.invoke(prompt_input)
return result.content.strip()
def generate_uiux_priority(self, report: str) -> PrioritySuggestions:
logger.info("Generating prioritized UX suggestions via chain...")
rec: Recommendation = self.priority_chain.invoke({"report": report})
return rec.priority_suggestions