Skip to content

chatlas 0.19.0

Choose a tag to compare

@cpsievert cpsievert released this 15 Jun 20:30
· 77 commits to main since this release

New features

  • 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.