| 154 | |
| 155 | |
| 156 | class Settings(BaseSettings): |
| 157 | model_config = SettingsConfigDict(env_prefix="letta_", extra="ignore") |
| 158 | |
| 159 | letta_dir: Optional[Path] = Field(Path.home() / ".letta", env="LETTA_DIR") |
| 160 | debug: Optional[bool] = False |
| 161 | cors_origins: Optional[list] = cors_origins |
| 162 | |
| 163 | # database configuration |
| 164 | pg_db: Optional[str] = None |
| 165 | pg_user: Optional[str] = None |
| 166 | pg_password: Optional[str] = None |
| 167 | pg_host: Optional[str] = None |
| 168 | pg_port: Optional[int] = None |
| 169 | pg_uri: Optional[str] = default_pg_uri # option to specify full uri |
| 170 | pg_pool_size: int = 80 # Concurrent connections |
| 171 | pg_max_overflow: int = 30 # Overflow limit |
| 172 | pg_pool_timeout: int = 30 # Seconds to wait for a connection |
| 173 | pg_pool_recycle: int = 1800 # When to recycle connections |
| 174 | pg_echo: bool = False # Logging |
| 175 | |
| 176 | # multi agent settings |
| 177 | multi_agent_send_message_max_retries: int = 3 |
| 178 | multi_agent_send_message_timeout: int = 20 * 60 |
| 179 | multi_agent_concurrent_sends: int = 50 |
| 180 | |
| 181 | # telemetry logging |
| 182 | verbose_telemetry_logging: bool = False |
| 183 | otel_exporter_otlp_endpoint: Optional[str] = None # otel default: "http://localhost:4317" |
| 184 | disable_tracing: bool = False |
| 185 | |
| 186 | # uvicorn settings |
| 187 | uvicorn_workers: int = 1 |
| 188 | uvicorn_reload: bool = False |
| 189 | uvicorn_timeout_keep_alive: int = 5 |
| 190 | |
| 191 | # event loop parallelism |
| 192 | event_loop_threadpool_max_workers: int = 43 |
| 193 | |
| 194 | # experimental toggle |
| 195 | use_experimental: bool = False |
| 196 | |
| 197 | # LLM provider client settings |
| 198 | httpx_max_retries: int = 5 |
| 199 | httpx_timeout_connect: float = 10.0 |
| 200 | httpx_timeout_read: float = 60.0 |
| 201 | httpx_timeout_write: float = 30.0 |
| 202 | httpx_timeout_pool: float = 10.0 |
| 203 | httpx_max_connections: int = 500 |
| 204 | httpx_max_keepalive_connections: int = 500 |
| 205 | httpx_keepalive_expiry: float = 120.0 |
| 206 | |
| 207 | # cron job parameters |
| 208 | enable_batch_job_polling: bool = False |
| 209 | poll_running_llm_batches_interval_seconds: int = 5 * 60 |
| 210 | |
| 211 | @property |
| 212 | def letta_pg_uri(self) -> str: |
| 213 | if self.pg_uri: |
no test coverage detected