Added
CACHE_CONNECT_TIMEOUT_SECONDS(default 5) andCACHE_CONNECT_RETRIES(default 3). The Redis client retries a failed connect with exponential backoff (0.1s base, 0.5s cap), so an instance that boots alongside several others no longer fails on a singleTimeout connecting to server(#1234)
Changed
- Listing a peer's sessions uses a new
session_peers (workspace_name, peer_name, session_name)index and starts from that peer's rows instead of walking every session in the workspace (28.9ms to 0.15ms on a 326k-row test table). This release includes a migration. The index is not builtCONCURRENTLY, so writes tosession_peerswait while it builds (#1237) - LLM provider 5xx and connection errors are no longer sent to Sentry on every attempt by the Anthropic, OpenAI, and Google GenAI SDK integrations. Honcho reports the final error once its retries are exhausted, so an outage that recovers on retry no longer alerts. Client errors (400, 401, 404, 429) are still reported (#1242)
- Dialectic and dreamer runs are typed
agentin Langfuse, so they appear in the Agent Graph. Generation output with tool calls is an OpenAI-style assistant message carrying the tool arguments and any thinking, instead of just the tool names. Thelangfusefloor rises to>=4.6.1(#1258) - The deriver prompt and output schema no longer carry example facts. New rules resolve relative dates against each message's
time, treat details in a question or proposal the target peer accepts as stated by them, skip conversational mechanics (greetings, thanks, acknowledgements), and keep one fact per conclusion with its qualifiers attached and no reworded duplicates (#1263)
Removed
- Inline Langfuse instrumentation and the
LANGFUSE_EXPORTER_MODEsetting. Langfuse traces now come only from the exporter over the captured LLM call stream, which has been the default since 3.0.12. A leftoverLANGFUSE_EXPORTER_MODE=inlineis ignored. The exporter only registers whenTELEMETRY_ENABLEDis true, so deployments that set Langfuse keys with telemetry off no longer get traces (#1253)
Fixed
- Context routes (
GET /peers/{id}/context,POST /peers/{id}/representation,GET /sessions/{id}/context) truncate asearch_querylonger thanEMBEDDING.MAX_INPUT_TOKENS(8192) before embedding it. Before, the embed failed and the route returned a 200 with semantic results silently dropped. Session context also releases its DB connection before the embedding call (#1255) - Langfuse traces reflect what happened: generations show the call's real latency, every trace has one root observation,
user_idand the trace name sit on every observation, run and step spans stay open until the run ends, and tool spans carry the result and real duration (#1235) - A Redis connection dropped while idle is reconnected and the command retried, instead of failing the request. uvloop raised a
RuntimeErroron the closed transport, which redis-py did not treat as a connection error (#1245)