from pydantic import BaseModel from pydantic_settings import BaseSettings, SettingsConfigDict class ZMQSettings(BaseModel): internal_pub_address: str = "tcp://localhost:5560" internal_sub_address: str = "tcp://localhost:5561" ri_command_address: str = "tcp://localhost:0000" ri_communication_address: str = "tcp://*:5555" vad_agent_address: str = "tcp://localhost:5558" class AgentSettings(BaseModel): # connection settings host: str = "localhost" # agent names bdi_core_agent_name: str = "bdi_core" belief_collector_agent_name: str = "belief_collector" text_belief_extractor_agent_name: str = "text_belief_extractor" vad_agent_name: str = "vad_agent" llm_agent_name: str = "llm_agent" test_agent_name: str = "test_agent" transcription_agent_name: str = "transcription_agent" ri_communication_agent_name: str = "ri_communication_agent" ri_command_agent_name: str = "ri_command_agent" # default SPADE port default_spade_port: int = 5222 class BehaviourSettings(BaseModel): ping_sleep_s: float = 1.0 comm_setup_max_retries: int = 5 socket_poller_timeout_ms: int = 100 # VAD settings vad_prob_threshold: float = 0.5 vad_initial_since_speech: int = 100 vad_non_speech_patience_chunks: int = 3 vad_poll_time: int = 1 # transcription behaviour transcription_max_concurrent_tasks: int = 3 transcription_words_per_minute: int = 300 transcription_words_per_token: float = 0.75 # (3 words = 4 tokens) transcription_token_buffer: int = 10 class LLMSettings(BaseModel): local_llm_url: str = "http://localhost:1234/v1/chat/completions" local_llm_model: str = "openai/gpt-oss-20b" request_timeout_s: int = 120 class VADSettings(BaseModel): repo_or_dir: str = "snakers4/silero-vad" model_name: str = "silero_vad" sample_rate_hz: int = 16000 class SpeechModelSettings(BaseModel): # model identifiers for speech recognition mlx_model_name: str = "mlx-community/whisper-small.en-mlx" openai_model_name: str = "small.en" class Settings(BaseSettings): app_title: str = "PepperPlus" ui_url: str = "http://localhost:5173" zmq_settings: ZMQSettings = ZMQSettings() agent_settings: AgentSettings = AgentSettings() behaviour_settings: BehaviourSettings = BehaviourSettings() vad_settings: VADSettings = VADSettings() speech_model_settings: SpeechModelSettings = SpeechModelSettings() llm_settings: LLMSettings = LLMSettings() model_config = SettingsConfigDict(env_file=".env") settings = Settings()