"""PageSpeed Insights data analysis and comparison.""" import json from openai import OpenAI from models import PageSpeedData, ComparisonResult from config import config class PageSpeedAnalyzer: """Analyzer for PageSpeed Insights data comparison and AI-powered analysis.""" def __init__(self): if not config.openai_api_key: raise ValueError("OPENAI_API_KEY não configurada. Configure nas variáveis de ambiente do Space.") self.client = OpenAI(api_key=config.openai_api_key) self.model = config.openai_model def compare_metrics(self, data1: PageSpeedData, data2: PageSpeedData) -> ComparisonResult: """Compare metrics between two PageSpeed analyses.""" return ComparisonResult.from_data(data1, data2) def analyze_with_openai(self, data1: PageSpeedData, data2: PageSpeedData, comparison: ComparisonResult) -> str: """Generate AI-powered analysis of the comparison results.""" try: prompt = self._build_analysis_prompt(data1, data2, comparison) response = self.client.chat.completions.create( model=self.model, messages=[ { "role": "user", "content": prompt } ] ) return response.choices[0].message.content except Exception as e: return f"Erro ao gerar análise com OpenAI: {str(e)}" def _build_analysis_prompt(self, data1: PageSpeedData, data2: PageSpeedData, comparison: ComparisonResult) -> str: """Build analysis prompt for OpenAI API.""" return f""" Análise Comparativa de Performance Web - PageSpeed Insights ANÁLISE ANTERIOR: - Data: {data1.fetch_time} - Performance Score: {data1.performance_score:.1f} - Accessibility: {data1.accessibility_score:.1f} - Core Web Vitals: * LCP: {data1.lcp:.2f}s * CLS: {data1.cls:.3f} * TBT: {data1.tbt:.0f}ms * FCP: {data1.fcp:.2f}s * Speed Index: {data1.speed_index:.2f}s ANÁLISE ATUAL: - Data: {data2.fetch_time} - Performance Score: {data2.performance_score:.1f} - Accessibility: {data2.accessibility_score:.1f} - Core Web Vitals: * LCP: {data2.lcp:.2f}s * CLS: {data2.cls:.3f} * TBT: {data2.tbt:.0f}ms * FCP: {data2.fcp:.2f}s * Speed Index: {data2.speed_index:.2f}s DIFERENÇAS: {json.dumps(comparison.to_dict(), indent=2, ensure_ascii=False)} OPORTUNIDADES IDENTIFICADAS NA ANÁLISE ATUAL: {json.dumps([{'title': opp.title, 'description': opp.description, 'savings': opp.savings} for opp in data2.opportunities[:5]], indent=2, ensure_ascii=False)} Por favor, forneça: 1. Um resumo executivo das mudanças 2. Análise detalhada do que melhorou e o que piorou 3. Impacto das mudanças nos Core Web Vitals 4. Recomendações específicas e priorizadas para melhorias adicionais 5. Próximos passos sugeridos Seja específico, técnico e orientado a ações práticas. """