from __future__ import annotations from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any class CampaingCreate(BaseModel): campaing_id: str strbrand: str product: str target_audience: str tone: str ="信頼感・エビデンス重視" language: str = "ja" contraints: Optional[Dict[str, Any]] = None k_variant: int = 5 value_per_conversion: float = 1.0 class AdVariant(BaseModel): variant_id: str text: str status: str rejection_reason: Optional[str] = None class GenerateAdsRequest(CampaingCreate): pass class GenerateAdsResponse(BaseModel): campaing_id: str variants: List[AdVariant] class ServerRequest(BaseModel): campaing_id: str context: Optional[Dict[str, Any]] = None class ServeResponse(BaseModel): campaing_id: str variant_id: str text: str class FeedbackEvent(BaseModel): campaing_id: str variant_id: str event_type: str ts: Optional[str] = None value: Optional[float] = None class ReportRequest(BaseModel): campaing_id: str class VariantReport(BaseModel): variant_id: str impressions: int clicks: int conversions: int ctr: float cvr: float expected_value: float class ReportResponse(BaseModel): campaing_id:str variant:List[VariantReport]