Spaces:
Runtime error
Runtime error
| """Pydantic schemas for API request/response models.""" | |
| from typing import Literal | |
| from pydantic import BaseModel, Field | |
| class AnalysisRequest(BaseModel): | |
| """Request to analyze a company/product.""" | |
| company_name: str = Field( | |
| ..., | |
| description="Name of company or product to analyze", | |
| min_length=1, | |
| max_length=200, | |
| examples=["Tesla Model Y", "Notion", "ChatGPT"], | |
| ) | |
| industry: str | None = Field( | |
| None, | |
| description="Industry context (optional)", | |
| max_length=100, | |
| examples=["Electric Vehicles", "Productivity Software", "AI"], | |
| ) | |
| model: str = Field( | |
| default="x-ai/grok-4.1-fast:free", | |
| description="LLM model to use", | |
| examples=[ | |
| "x-ai/grok-4.1-fast:free", | |
| "anthropic/claude-sonnet-4.5", | |
| "openai/gpt-5-mini", | |
| ], | |
| ) | |
| max_budget: float = Field( | |
| default=2.0, ge=0.0, le=10.0, description="Maximum cost in USD" | |
| ) | |
| class AnalysisResponse(BaseModel): | |
| """Response from analysis endpoint.""" | |
| run_id: str = Field(..., description="Unique run identifier") | |
| status: Literal["pending", "running", "completed", "failed"] = Field( | |
| ..., description="Current status" | |
| ) | |
| company_name: str = Field(..., description="Company being analyzed") | |
| # Results (populated when completed) | |
| executive_summary: str | None = Field(None, description="Executive summary") | |
| full_report: str | None = Field(None, description="Full markdown report") | |
| # Metadata | |
| total_cost: float = Field(default=0.0, description="Total cost in USD") | |
| total_tokens: int = Field(default=0, description="Total tokens used") | |
| sources_count: int = Field(default=0, description="Number of sources processed") | |
| # Errors | |
| errors: list[str] = Field(default_factory=list, description="Error messages") | |
| # Human approval | |
| approved: bool = Field(default=False, description="Human approval status") | |
| class StatusResponse(BaseModel): | |
| """Response for status check.""" | |
| run_id: str | |
| status: Literal["pending", "running", "completed", "failed"] | |
| current_agent: str | None = Field(None, description="Currently executing agent") | |
| progress: float = Field(0.0, ge=0.0, le=1.0, description="Progress 0-1") | |
| message: str | None = Field(None, description="Status message") | |
| class HistoryItem(BaseModel): | |
| """Historical analysis item.""" | |
| run_id: str | |
| company_name: str | |
| created_at: str | |
| status: str | |
| total_cost: float | |
| approved: bool | |
| class HistoryResponse(BaseModel): | |
| """Response for history endpoint.""" | |
| analyses: list[HistoryItem] | |
| total: int | |