Spaces:
Running
Running
| """ | |
| Pydantic models for application configuration. | |
| """ | |
| from typing import List, Dict, Optional, Any | |
| from pathlib import Path | |
| from pydantic import BaseModel, Field, validator | |
| from enum import Enum | |
| class AppConfig(BaseModel): | |
| """General application settings.""" | |
| name: str | |
| version: str | |
| debug: bool | |
| environment: str | |
| debug_prompts: bool = False | |
| class AWSConfig(BaseModel): | |
| """AWS S3 configuration.""" | |
| bucket_name: str | |
| region: str | |
| prefix_retriever: str | |
| local_dir: str | |
| def validate_local_dir(cls, v): | |
| """Ensure local_dir is a valid path string.""" | |
| return str(Path(v)) | |
| class LlamaIndexConfig(BaseModel): | |
| """LlamaIndex settings.""" | |
| context_window: int | |
| chunk_size: int | |
| similarity_top_k: int | |
| embed_model: str | |
| def validate_positive(cls, v): | |
| """Ensure values are positive.""" | |
| if v <= 0: | |
| raise ValueError("Value must be positive") | |
| return v | |
| class MaxTokensConfig(BaseModel): | |
| """Max tokens configuration for different providers.""" | |
| openai: int = 8192 | |
| anthropic: int = 8192 | |
| gemini: int = 8192 | |
| deepseek: int = 8192 | |
| class GenerationConfig(BaseModel): | |
| """Generation settings.""" | |
| max_tokens: MaxTokensConfig | |
| max_tokens_analysis: int = 2000 | |
| temperature: float = 0.0 | |
| def validate_max_tokens_analysis(cls, v): | |
| """Ensure max_tokens_analysis is positive.""" | |
| if v <= 0: | |
| raise ValueError("max_tokens_analysis must be positive") | |
| return v | |
| class ModelInfo(BaseModel): | |
| """Information about a specific model.""" | |
| name: str | |
| display_name: str | |
| default: bool = False | |
| class ModelProviderConfig(BaseModel): | |
| """Configuration for a model provider.""" | |
| openai: List[ModelInfo] = [] | |
| anthropic: List[ModelInfo] = [] | |
| gemini: List[ModelInfo] = [] | |
| deepseek: List[ModelInfo] = [] | |
| class ModelsConfig(BaseModel): | |
| """Models configuration.""" | |
| default_provider: str | |
| providers: List[str] | |
| generation: ModelProviderConfig | |
| analysis: ModelProviderConfig | |
| class SchemaProperty(BaseModel): | |
| """JSON schema property definition.""" | |
| type: str | |
| description: Optional[str] = None | |
| class LegalPositionSchema(BaseModel): | |
| """Legal position schema configuration.""" | |
| type: str | |
| required_fields: List[str] | |
| schema_definition: Dict[str, Any] = Field(alias="schema") | |
| class Config: | |
| populate_by_name = True | |
| class SchemasConfig(BaseModel): | |
| """Schemas configuration.""" | |
| legal_position: LegalPositionSchema | |
| class SessionConfig(BaseModel): | |
| """Session management configuration.""" | |
| timeout_minutes: int | |
| cleanup_interval_minutes: int | |
| max_sessions: int | |
| storage_type: str | |
| def validate_storage_type(cls, v): | |
| """Validate storage type.""" | |
| allowed = ["memory", "redis"] | |
| if v not in allowed: | |
| raise ValueError(f"storage_type must be one of {allowed}") | |
| return v | |
| class RedisConfig(BaseModel): | |
| """Redis configuration.""" | |
| host: str | |
| port: int | |
| db: int | |
| password: Optional[str] = None | |
| ssl: bool | |
| class LoggingConfig(BaseModel): | |
| """Logging configuration.""" | |
| level: str | |
| format: str | |
| file: Optional[str] | |
| max_bytes: int | |
| backup_count: int | |
| console: bool | |
| def validate_level(cls, v): | |
| """Validate logging level.""" | |
| allowed = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] | |
| v_upper = v.upper() | |
| if v_upper not in allowed: | |
| raise ValueError(f"level must be one of {allowed}") | |
| return v_upper | |
| class ThemeConfig(BaseModel): | |
| """Gradio theme configuration.""" | |
| base: str = "Soft" | |
| primary_hue: str = "blue" | |
| secondary_hue: str = "indigo" | |
| class GradioConfig(BaseModel): | |
| """Gradio interface configuration.""" | |
| server_name: str | |
| server_port: int | |
| share: bool | |
| show_error: bool | |
| ssr_mode: bool = True | |
| theme: ThemeConfig = ThemeConfig() | |
| css: Optional[str] = None | |
| class Settings(BaseModel): | |
| """Main application settings.""" | |
| app: AppConfig | |
| aws: AWSConfig | |
| llama_index: LlamaIndexConfig | |
| generation: GenerationConfig | |
| models: ModelsConfig | |
| schemas: SchemasConfig | |
| required_files: List[str] | |
| session: SessionConfig | |
| redis: RedisConfig | |
| logging: LoggingConfig | |
| gradio: GradioConfig | |
| class Config: | |
| """Pydantic configuration.""" | |
| validate_assignment = True | |
| arbitrary_types_allowed = True | |