You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
chatlas is now instrumented with OpenTelemetry (OTel) out of the box, making it much easier to see how your app behaves in production — where time goes, how many tokens you're spending, which tools run, and where things fail. Without writing any tracing code, you get spans that capture the full structure of a conversation as one connected trace: an invoke_agent span over the whole chat loop, a chat span per model call, and an execute_tool span per tool invocation, with attributes (token usage, response model/ID, tool errors) that follow the OTel GenAI semantic conventions. Because chatlas keeps its spans active during each call, HTTP spans from provider instrumentors and any spans your own tools emit nest underneath automatically. Point it at any OTel-compatible backend (Logfire, Datadog, Honeycomb, Jaeger, …); message content is omitted by default and opt-in via OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true. See the monitoring guide to get started. (#310)
Chat gains a model property to get (or set) the model after the chat is created. Setting it does not validate the model name.
ChatGoogle()'s reasoning parameter now accepts a string thinking level ("minimal", "low", "medium", or "high") in addition to an integer token budget.
ChatAnthropic()'s reasoning parameter now accepts a string effort level ("low", "medium", "high", "xhigh", or "max") to enable Claude's adaptive thinking, in addition to an integer token budget.
Bug fixes
OpenAI-compatible providers (e.g., ChatOllama() with models like qwen3) now capture thinking content returned in a reasoning field, not just reasoning_content. Previously this thinking content was silently dropped.