195 lines
7.3 KiB
Python
195 lines
7.3 KiB
Python
"""
|
|
An exhaustive overview of configurable options. All of these can be set using environment variables
|
|
by nesting with double underscores (__). Start from the ``Settings`` class.
|
|
|
|
For example, ``settings.ri_host`` becomes ``RI_HOST``, and
|
|
``settings.zmq_settings.ri_communication_address`` becomes
|
|
``ZMQ_SETTINGS__RI_COMMUNICATION_ADDRESS``.
|
|
"""
|
|
|
|
from pydantic import BaseModel
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class ZMQSettings(BaseModel):
|
|
"""
|
|
Configuration for ZeroMQ (ZMQ) addresses used for inter-process communication.
|
|
|
|
:ivar internal_pub_address: Address for the internal PUB socket.
|
|
:ivar internal_sub_address: Address for the internal SUB socket.
|
|
:ivar ri_communication_address: Address for the endpoint that the Robot Interface connects to.
|
|
:ivar vad_pub_address: Address that the VAD agent binds to and publishes audio segments to.
|
|
"""
|
|
|
|
# ATTENTION: When adding/removing settings, make sure to update the .env.example file
|
|
|
|
internal_pub_address: str = "tcp://localhost:5560"
|
|
internal_sub_address: str = "tcp://localhost:5561"
|
|
ri_communication_address: str = "tcp://*:5555"
|
|
internal_gesture_rep_adress: str = "tcp://localhost:7788"
|
|
vad_pub_address: str = "inproc://vad_stream"
|
|
|
|
|
|
class AgentSettings(BaseModel):
|
|
"""
|
|
Names of the various agents in the system. These names are used for routing messages.
|
|
|
|
:ivar bdi_core_name: Name of the BDI Core Agent.
|
|
:ivar bdi_belief_collector_name: Name of the Belief Collector Agent.
|
|
:ivar bdi_program_manager_name: Name of the BDI Program Manager Agent.
|
|
:ivar text_belief_extractor_name: Name of the Text Belief Extractor Agent.
|
|
:ivar vad_name: Name of the Voice Activity Detection (VAD) Agent.
|
|
:ivar llm_name: Name of the Large Language Model (LLM) Agent.
|
|
:ivar test_name: Name of the Test Agent.
|
|
:ivar transcription_name: Name of the Transcription Agent.
|
|
:ivar ri_communication_name: Name of the RI Communication Agent.
|
|
:ivar robot_speech_name: Name of the Robot Speech Agent.
|
|
"""
|
|
|
|
# ATTENTION: When adding/removing settings, make sure to update the .env.example file
|
|
|
|
# agent names
|
|
bdi_core_name: str = "bdi_core_agent"
|
|
bdi_belief_collector_name: str = "belief_collector_agent"
|
|
bdi_program_manager_name: str = "bdi_program_manager_agent"
|
|
text_belief_extractor_name: str = "text_belief_extractor_agent"
|
|
vad_name: str = "vad_agent"
|
|
llm_name: str = "llm_agent"
|
|
test_name: str = "test_agent"
|
|
transcription_name: str = "transcription_agent"
|
|
ri_communication_name: str = "ri_communication_agent"
|
|
robot_speech_name: str = "robot_speech_agent"
|
|
robot_gesture_name: str = "robot_gesture_agent"
|
|
user_interrupt_name: str = "user_interrupt_agent"
|
|
|
|
|
|
class BehaviourSettings(BaseModel):
|
|
"""
|
|
Configuration for agent behaviors and parameters.
|
|
|
|
:ivar sleep_s: Default sleep time in seconds for loops.
|
|
:ivar comm_setup_max_retries: Maximum number of retries for setting up communication.
|
|
:ivar socket_poller_timeout_ms: Timeout in milliseconds for socket polling.
|
|
:ivar vad_prob_threshold: Probability threshold for Voice Activity Detection.
|
|
:ivar vad_initial_since_speech: Initial value for 'since speech' counter in VAD.
|
|
:ivar vad_non_speech_patience_chunks: Number of non-speech chunks to wait before speech ended.
|
|
:ivar vad_begin_silence_chunks: The number of chunks of silence to prepend to speech chunks.
|
|
:ivar transcription_max_concurrent_tasks: Maximum number of concurrent transcription tasks.
|
|
:ivar transcription_words_per_minute: Estimated words per minute for transcription timing.
|
|
:ivar transcription_words_per_token: Estimated words per token for transcription timing.
|
|
:ivar transcription_token_buffer: Buffer for transcription tokens.
|
|
:ivar conversation_history_length_limit: The maximum amount of messages to extract beliefs from.
|
|
"""
|
|
|
|
# ATTENTION: When adding/removing settings, make sure to update the .env.example file
|
|
|
|
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 = 15
|
|
vad_begin_silence_chunks: int = 3
|
|
|
|
# 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
|
|
|
|
# Text belief extractor settings
|
|
conversation_history_length_limit: int = 10
|
|
|
|
|
|
class LLMSettings(BaseModel):
|
|
"""
|
|
Configuration for the Large Language Model (LLM).
|
|
|
|
:ivar local_llm_url: URL for the local LLM API.
|
|
:ivar local_llm_model: Name of the local LLM model to use.
|
|
:ivar chat_temperature: The temperature to use while generating chat responses.
|
|
:ivar code_temperature: The temperature to use while generating code-like responses like during
|
|
belief inference.
|
|
:ivar n_parallel: The number of parallel calls allowed to be made to the LLM.
|
|
"""
|
|
|
|
# ATTENTION: When adding/removing settings, make sure to update the .env.example file
|
|
|
|
local_llm_url: str = "http://localhost:1234/v1/chat/completions"
|
|
local_llm_model: str = "gpt-oss"
|
|
chat_temperature: float = 1.0
|
|
code_temperature: float = 0.3
|
|
n_parallel: int = 4
|
|
|
|
|
|
class VADSettings(BaseModel):
|
|
"""
|
|
Configuration for Voice Activity Detection (VAD) model.
|
|
|
|
:ivar repo_or_dir: Repository or directory for the VAD model.
|
|
:ivar model_name: Name of the VAD model.
|
|
:ivar sample_rate_hz: Sample rate in Hz for the VAD model.
|
|
"""
|
|
|
|
# ATTENTION: When adding/removing settings, make sure to update the .env.example file
|
|
|
|
repo_or_dir: str = "snakers4/silero-vad"
|
|
model_name: str = "silero_vad"
|
|
sample_rate_hz: int = 16000
|
|
|
|
|
|
class SpeechModelSettings(BaseModel):
|
|
"""
|
|
Configuration for speech recognition models.
|
|
|
|
:ivar mlx_model_name: Model name for MLX-based speech recognition.
|
|
:ivar openai_model_name: Model name for OpenAI-based speech recognition.
|
|
"""
|
|
|
|
# ATTENTION: When adding/removing settings, make sure to update the .env.example file
|
|
|
|
# model identifiers for speech recognition
|
|
mlx_model_name: str = "mlx-community/whisper-small.en-mlx"
|
|
openai_model_name: str = "small.en"
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
"""
|
|
Global application settings.
|
|
|
|
:ivar app_title: Title of the application.
|
|
:ivar ui_url: URL of the frontend UI.
|
|
:ivar ri_host: The hostname of the Robot Interface.
|
|
:ivar zmq_settings: ZMQ configuration.
|
|
:ivar agent_settings: Agent name configuration.
|
|
:ivar behaviour_settings: Behavior configuration.
|
|
:ivar vad_settings: VAD model configuration.
|
|
:ivar speech_model_settings: Speech model configuration.
|
|
:ivar llm_settings: LLM configuration.
|
|
"""
|
|
|
|
app_title: str = "PepperPlus"
|
|
|
|
ui_url: str = "http://localhost:5173"
|
|
|
|
ri_host: str = "localhost"
|
|
|
|
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", env_nested_delimiter="__")
|
|
|
|
|
|
settings = Settings()
|