""" JSON schemas for Gemini API responses. Ensures structured, predictable outputs from the AI model. Note: Uses Google GenAI SDK schema format (uppercase types: STRING, NUMBER, etc.) """ from typing import Dict, Any class GeminiSchemas: """Collection of JSON schemas for different response types.""" @staticmethod def language_detection() -> Dict[str, Any]: """Schema for language and framework detection.""" return { "type": "OBJECT", "properties": { "language": { "type": "STRING", "description": "Detected programming language" }, "framework": { "type": "STRING", "description": "Detected framework or empty string if none", "nullable": True }, "confidence": { "type": "NUMBER", "description": "Confidence score between 0.0 and 1.0" } }, "required": ["language", "framework", "confidence"] } @staticmethod def pattern_analysis() -> Dict[str, Any]: """Schema for pattern analysis results.""" return { "type": "OBJECT", "properties": { "patterns": { "type": "ARRAY", "items": { "type": "OBJECT", "properties": { "pattern_type": {"type": "STRING"}, "severity": { "type": "STRING", "enum": ["critical", "high", "medium", "low", "info"] }, "line_numbers": { "type": "ARRAY", "items": {"type": "INTEGER"} }, "confidence": { "type": "NUMBER" }, "description": {"type": "STRING"}, "recommendation": {"type": "STRING"}, "estimated_effort_hours": { "type": "NUMBER" } }, "required": [ "pattern_type", "severity", "line_numbers", "confidence", "description", "recommendation", "estimated_effort_hours" ] } }, "modernization_score": { "type": "INTEGER" }, "requires_modernization": {"type": "BOOLEAN"}, "overall_priority": { "type": "STRING", "enum": ["critical", "high", "medium", "low", "info"] } }, "required": [ "patterns", "modernization_score", "requires_modernization", "overall_priority" ] } @staticmethod def batch_pattern_analysis() -> Dict[str, Any]: """Schema for batch pattern analysis results.""" return { "type": "OBJECT", "properties": { "files": { "type": "ARRAY", "items": { "type": "OBJECT", "properties": { "file_path": {"type": "STRING"}, "language": {"type": "STRING"}, "framework": { "type": "STRING", "nullable": True }, "patterns": { "type": "ARRAY", "items": { "type": "OBJECT", "properties": { "pattern_type": {"type": "STRING"}, "severity": { "type": "STRING", "enum": ["critical", "high", "medium", "low", "info"] }, "line_numbers": { "type": "ARRAY", "items": {"type": "INTEGER"} }, "confidence": { "type": "NUMBER" }, "description": {"type": "STRING"}, "recommendation": {"type": "STRING"}, "estimated_effort_hours": { "type": "NUMBER" } }, "required": [ "pattern_type", "severity", "line_numbers", "confidence", "description", "recommendation", "estimated_effort_hours" ] } }, "modernization_score": { "type": "INTEGER" }, "requires_modernization": {"type": "BOOLEAN"}, "overall_priority": { "type": "STRING", "enum": ["critical", "high", "medium", "low", "info"] } }, "required": [ "file_path", "language", "framework", "patterns", "modernization_score", "requires_modernization", "overall_priority" ] } } }, "required": ["files"] } @staticmethod def file_classification() -> Dict[str, Any]: """Schema for file classification results.""" return { "type": "OBJECT", "properties": { "classification": { "type": "STRING", "enum": ["primary", "secondary", "test", "config", "documentation"] }, "confidence": { "type": "NUMBER" }, "reasoning": {"type": "STRING"}, "language": {"type": "STRING"}, "framework": { "type": "STRING", "nullable": True } }, "required": ["classification", "confidence", "reasoning", "language", "framework"] } @staticmethod def code_analysis() -> Dict[str, Any]: """Schema for detailed code analysis.""" return { "type": "OBJECT", "properties": { "summary": {"type": "STRING"}, "issues": { "type": "ARRAY", "items": { "type": "OBJECT", "properties": { "type": {"type": "STRING"}, "severity": { "type": "STRING", "enum": ["critical", "high", "medium", "low", "info"] }, "description": {"type": "STRING"}, "line_numbers": { "type": "ARRAY", "items": {"type": "INTEGER"} }, "recommendation": {"type": "STRING"} }, "required": ["type", "severity", "description", "line_numbers", "recommendation"] } }, "transformation_steps": { "type": "ARRAY", "items": { "type": "OBJECT", "properties": { "step": {"type": "STRING"}, "description": {"type": "STRING"}, "priority": { "type": "STRING", "enum": ["critical", "high", "medium", "low"] }, "estimated_hours": { "type": "NUMBER" } }, "required": ["step", "description", "priority", "estimated_hours"] } }, "dependencies": { "type": "ARRAY", "items": {"type": "STRING"} }, "estimated_total_hours": { "type": "NUMBER" } }, "required": [ "summary", "issues", "transformation_steps", "dependencies", "estimated_total_hours" ] } @staticmethod def test_generation() -> Dict[str, Any]: """Schema for test generation metadata.""" return { "type": "OBJECT", "properties": { "test_framework": {"type": "STRING"}, "test_count": { "type": "INTEGER" }, "coverage_areas": { "type": "ARRAY", "items": {"type": "STRING"} }, "test_types": { "type": "ARRAY", "items": { "type": "STRING", "enum": ["unit", "integration", "edge_case", "error_handling"] } }, "notes": {"type": "STRING"} }, "required": ["test_framework", "test_count", "coverage_areas", "test_types", "notes"] }