from pydantic import BaseModel, field_validator from typing import Dict, Optional from .user_settings import ApiKeyItem class SummaryResponse(BaseModel): arxiv_id: str summary: str class SummaryGenerateRequest(BaseModel): arxiv_id: Optional[str] = None pdf_url: Optional[str] = None api_keys_encrypted: Optional[list[ApiKeyItem]] = None @field_validator("arxiv_id", "pdf_url") @classmethod def check_at_least_one(cls, v, info): return v def model_post_init(self, __context) -> None: if not self.arxiv_id and not self.pdf_url: raise ValueError("Either arxiv_id or pdf_url must be provided") class UsabilityGenerateRequest(BaseModel): arxiv_id: Optional[str] = None pdf_url: Optional[str] = None api_keys_encrypted: Optional[list[ApiKeyItem]] = None @field_validator("arxiv_id", "pdf_url") @classmethod def check_at_least_one(cls, v, info): return v def model_post_init(self, __context) -> None: if not self.arxiv_id and not self.pdf_url: raise ValueError("Either arxiv_id or pdf_url must be provided") class UsabilityResponse(BaseModel): arxiv_id: Optional[str] = None pdf_url: Optional[str] = None domain_applicability: Dict[str, float] reproducibility_score: Dict[str, float] new_tech_applicability: Dict[str, float] impact_score: Optional[float]