Limits and timeouts
Backend
Section titled “Backend”| Limit | Value | Configurable | Effect when reached |
|---|---|---|---|
| Text of one turn | 64 KiB (65 536 bytes, UTF-8) | no | Refused with too_large. |
| Audio of one turn | 60 seconds | no | Refused with too_large. |
| Time to produce an answer | 30 seconds, from the start of the agent choice to the end of the answer, tool calls included | no | Turn fails with the standard message. |
| Tool calls per turn | maxToolCalls |
per agent | Turn fails with the standard message. |
| Turns per conversation at a time | 1 | no | Further turns on that conversation are refused with occupied. Turns on other conversations run in parallel. |
| Incoming audio streams per session | 1 | no | session.error with audio_busy. |
| Model request retries | 0 | no | A model error fails the turn. |
| Second generation after an answer without words | 1 | no | The agent is asked once more to write its answer, without tools. If that is empty too, the turn fails with the standard message. |
| Turns the models receive | AMBROGIO_HISTORY_TURNS (20), the new turn included |
yes | Earlier turns stay stored and visible in the clients, but the orchestrator and the agents do not see them. |
| Session ping interval | 30 seconds | no | A session that does not answer by the next ping is closed. |
Shutdown after SIGTERM or SIGINT |
10 seconds | no | The backend logs server_shutdown_timeout and exits with code 1. Give the container at least 15 seconds to stop. |
| Conversations per list page | AMBROGIO_LIST_PAGE_SIZE (20), at most AMBROGIO_MAX_LIST_PAGE_SIZE (100) |
yes | See Backend configuration. |
| Speech synthesis threads | 4, or fewer if the CPU has fewer | no | |
| Speech recognition threads | 2, or fewer if the CPU has fewer | no | |
| Silence added at the start of a voice request | 1 second | no | Keeps the first word, which the bundled model loses when speech starts at once. |
| Silence added at the end of a voice request | 0.8 seconds | no | Lets the recognizer finish the last words before the transcription is returned. |
Speech recognition runs while the request is open: each audio frame goes to the recognizer as it arrives, and at input.end only the last part remains to decode. The recognizer runs in one worker thread shared by all voice requests, which processes frames in the order they arrive. If the CPU cannot keep up with the audio, frames wait and the text arrives later; no audio is lost. Real-time recognition needs an x86_64 CPU with AVX2; see Before you install. If the worker stops because of a fault, the transcriptions in progress fail, their turns are refused with transcription_failed (“I didn’t understand the request.”), and the next voice request starts a new worker.
Turns are never queued and never retried automatically.
Satellite
Section titled “Satellite”| Setting | Value | Configurable |
|---|---|---|
| Wake word threshold | 0.25 | AMBROGIO_WAKE_WORD_THRESHOLD |
| Length of the wake word | 64 characters | no |
| Speech needed around a wake word | some speech in the 1.5 seconds that end with the detection; otherwise the detection is discarded | no |
| Pause between wake-ups | 2 seconds | no |
| Audio kept from before you start speaking | 1.5 seconds | no |
| Speech detection window | 32 ms (512 samples at 16 kHz) | no |
| Speech probability that counts as speech | above 0.26 | no |
| Speech probability that counts as silence | 0.11 or lower | no |
| Speech needed to start a request | 128 ms | no |
| Silence that ends a request | 640 ms | no |
| Continuous speech before the request is closed at the next short pause | 55 seconds | no |
| Wait for the backend to confirm a new session | 5 seconds; then the satellite closes the connection and treats the backend as unavailable | no |
| Wait for an outcome after you stop speaking | 60 seconds | no |
| Wait for a follow-up reply | 15 seconds, restarted after each answer | AMBROGIO_REPLY_TIMEOUT_MS |
| Level of other local audio during an interaction | set per installation, 100% otherwise | AMBROGIO_ATTENUATION_LEVEL |
Time allowed for each amixer call |
2 seconds | no |
Shutdown after SIGTERM or SIGINT |
5 seconds | no |
The satellite does not listen while it is speaking: you cannot interrupt an answer.
Terminal client
Section titled “Terminal client”| Limit | Value |
|---|---|
| Minimum terminal size | 70 × 14 characters |
| Largest message | 64 KiB in UTF-8, checked before sending |