from pydantic import BaseModel, field_validator from typing import Optional, Dict from datetime import datetime # EmailStr safely import karo try: from pydantic import EmailStr except ImportError: EmailStr = str # fallback class UserCreate(BaseModel): username: str email: EmailStr password: str @field_validator("username") @classmethod def username_alphanumeric(cls, v: str) -> str: if not v.replace("_", "").replace("-", "").isalnum(): raise ValueError("Username must be alphanumeric (underscores/hyphens allowed)") if len(v) < 3: raise ValueError("Username must be at least 3 characters") return v @field_validator("password") @classmethod def password_strength(cls, v: str) -> str: if len(v) < 6: raise ValueError("Password must be at least 6 characters") return v class UserOut(BaseModel): id: int username: str email: str created_at: datetime model_config = {"from_attributes": True} class Token(BaseModel): access_token: str token_type: str = "bearer" user: UserOut class LoginRequest(BaseModel): username: str password: str class ProxyCreate(BaseModel): name: str openai_base_url: str openai_api_key: str model_mapping: Optional[Dict[str, str]] = {} class ProxyUpdate(BaseModel): name: Optional[str] = None openai_base_url: Optional[str] = None openai_api_key: Optional[str] = None model_mapping: Optional[Dict[str, str]] = None class ProxyOut(BaseModel): id: int name: str proxy_token: str openai_base_url: str model_mapping: str created_at: datetime model_config = {"from_attributes": True}