"""Pydantic models for topic extraction endpoints""" from pydantic import BaseModel, Field, ConfigDict from typing import List, Optional class TopicRequest(BaseModel): """Request model for topic extraction""" model_config = ConfigDict( json_schema_extra={ "example": { "text": "Social media companies must NOT be allowed to track people across websites." } } ) text: str = Field( ..., min_length=5, max_length=5000, description="The text/argument to extract topic from" ) class TopicResponse(BaseModel): """Response model for topic extraction""" model_config = ConfigDict( json_schema_extra={ "example": { "text": "Social media companies must NOT be allowed to track people across websites.", "topic": "social media tracking and cross-website user privacy", "timestamp": "2024-01-01T12:00:00Z" } } ) text: str = Field(..., description="The original input text") topic: str = Field(..., description="The extracted topic") timestamp: str = Field(..., description="Timestamp of the extraction") class BatchTopicRequest(BaseModel): """Request model for batch topic extraction""" model_config = ConfigDict( json_schema_extra={ "example": { "texts": [ "Social media companies must NOT be allowed to track people across websites.", "I don't think universal basic income is a good idea — it'll disincentivize work.", "We must invest in renewable energy to combat climate change." ] } } ) texts: List[str] = Field( ..., min_length=1, max_length=50, description="List of texts to extract topics from (max 50)" ) class BatchTopicResponse(BaseModel): """Response model for batch topic extraction""" model_config = ConfigDict( json_schema_extra={ "example": { "results": [ { "text": "Social media companies must NOT be allowed to track people across websites.", "topic": "social media tracking and cross-website user privacy", "timestamp": "2024-01-01T12:00:00Z" }, { "text": "I don't think universal basic income is a good idea — it'll disincentivize work.", "topic": "universal basic income and its impact on work incentives", "timestamp": "2024-01-01T12:00:00Z" } ], "total_processed": 2, "timestamp": "2024-01-01T12:00:00Z" } } ) results: List[TopicResponse] = Field(..., description="List of topic extraction results") total_processed: int = Field(..., description="Number of texts processed") timestamp: str = Field(..., description="Timestamp of the batch extraction")