uvpatel7271's picture
Upload folder using huggingface_hub
c29f1fd verified
"""Response schemas for the multi-domain analysis platform."""
from __future__ import annotations
from typing import Dict, List, Literal
from pydantic import BaseModel, Field
DomainType = Literal["dsa", "data_science", "ml_dl", "web", "general"]
Severity = Literal["low", "medium", "high"]
class AnalysisIssue(BaseModel):
"""One detected issue or risk in the code snippet."""
title: str
severity: Severity
description: str
line_hint: int | None = None
class StaticAnalysisSummary(BaseModel):
"""Language-agnostic static-analysis signals."""
syntax_valid: bool
syntax_error: str = ""
cyclomatic_complexity: int = Field(..., ge=1)
line_count: int = Field(..., ge=0)
max_loop_depth: int = Field(..., ge=0)
time_complexity: str = "Unknown"
space_complexity: str = "Unknown"
detected_imports: List[str] = Field(default_factory=list)
code_smells: List[str] = Field(default_factory=list)
class DomainAnalysis(BaseModel):
"""Domain-specific analysis payload returned by an analyzer."""
domain: DomainType
domain_score: float = Field(..., ge=0.0, le=1.0)
issues: List[AnalysisIssue] = Field(default_factory=list)
suggestions: List[str] = Field(default_factory=list)
highlights: Dict[str, float | str] = Field(default_factory=dict)
class ScoreBreakdown(BaseModel):
"""Reward inputs and final normalized score."""
ml_score: float = Field(..., ge=0.0, le=1.0)
domain_score: float = Field(..., ge=0.0, le=1.0)
lint_score: float = Field(..., ge=0.0, le=1.0)
complexity_penalty: float = Field(..., ge=0.0, le=1.0)
reward: float = Field(..., ge=0.0, le=1.0)
class AnalyzeCodeResponse(BaseModel):
"""Top-level structured output for API and UI consumers."""
detected_domain: DomainType
domain_confidences: Dict[str, float]
score_breakdown: ScoreBreakdown
static_analysis: StaticAnalysisSummary
domain_analysis: DomainAnalysis
improvement_plan: List[str] = Field(default_factory=list)
model_backend: str
model_id: str
summary: str
context_window: str = ""
analysis_time_ms: float = Field(..., ge=0.0)