from typing import Optional, List, Union from pydantic import BaseModel, ConfigDict, field_validator, Field class JiraWebhookPayload(BaseModel): model_config = ConfigDict(alias_generator=lambda x: ''.join(word.capitalize() if i > 0 else word for i, word in enumerate(x.split('_'))), populate_by_name=True) issueKey: str summary: str description: Optional[str] = None comment: Optional[str] = None labels: Optional[Union[List[str], str]] = [] @field_validator('labels', mode='before') @classmethod def convert_labels_to_list(cls, v): if isinstance(v, str): return [v] return v or [] status: Optional[str] = None assignee: Optional[str] = None updated: Optional[str] = None class AnalysisFlags(BaseModel): hasMultipleEscalations: bool = Field(description="Is there evidence of multiple escalation attempts?") customerSentiment: Optional[str] = Field(description="Overall customer sentiment (e.g., 'neutral', 'frustrated', 'calm').")