|
|
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 |
|
|
) |
|
|
|
|
|
|
|
|
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}") |
|
|
]) |
|
|
|
|
|
|
|
|
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 |
|
|
|