Source code for pitchlense_mcp.models.risk_models

"""
Pydantic models for startup risk analysis data structures.

Provides type-safe models for risk indicators, categories, and analysis results.
"""

from pydantic import BaseModel, Field
from typing import List, Dict, Any, Optional
from enum import Enum


[docs] class RiskLevel(str, Enum): """Enumeration of risk levels.""" LOW = "low" MEDIUM = "medium" HIGH = "high" CRITICAL = "critical" UNKNOWN = "unknown"
[docs] class RiskIndicator(BaseModel): """Model for individual risk indicators.""" indicator: str = Field(description="The specific risk indicator") risk_level: RiskLevel = Field(description="Risk level assessment") score: int = Field(description="Risk score from 1-10", ge=1, le=10) description: str = Field(description="Detailed description of the risk") recommendation: str = Field(description="Recommended action to mitigate risk")
[docs] class RiskCategory(BaseModel): """Model for risk categories containing multiple indicators.""" category_name: str = Field(description="Name of the risk category") overall_risk_level: RiskLevel = Field(description="Overall risk level for this category") category_score: int = Field(description="Average risk score for this category", ge=1, le=10) indicators: List[RiskIndicator] = Field(description="List of risk indicators in this category") summary: str = Field(description="Summary of risks in this category")
[docs] class StartupRiskAnalysis(BaseModel): """Model for comprehensive startup risk analysis results.""" startup_name: str = Field(description="Name of the startup being analyzed") overall_risk_level: RiskLevel = Field(description="Overall risk level assessment") overall_score: int = Field(description="Overall risk score from 1-10", ge=1, le=10) risk_categories: List[RiskCategory] = Field(description="List of risk categories analyzed") key_concerns: List[str] = Field(description="Top 5 key concerns identified") investment_recommendation: str = Field(description="Investment recommendation based on analysis") confidence_score: float = Field(description="Confidence in the analysis (0.0-1.0)", ge=0.0, le=1.0) analysis_metadata: Optional[Dict[str, Any]] = Field(description="Additional analysis metadata", default=None)
[docs] class StartupData(BaseModel): """Model for startup input data.""" name: str = Field(description="Startup name") description: str = Field(description="Business description") industry: str = Field(description="Industry/sector") stage: str = Field(description="Development stage (idea, MVP, growth, etc.)") team_size: Optional[int] = Field(description="Number of team members", default=None) founders: Optional[List[str]] = Field(description="List of founder names", default=None) funding_raised: Optional[float] = Field(description="Total funding raised in USD", default=None) revenue: Optional[float] = Field(description="Annual revenue in USD", default=None) customers: Optional[int] = Field(description="Number of customers/users", default=None) market_size: Optional[str] = Field(description="Target market size description", default=None) competitors: Optional[List[str]] = Field(description="List of main competitors", default=None) additional_info: Optional[Dict[str, Any]] = Field(description="Additional relevant information", default=None)