Skip to content

chore: release v0.41.0#2100

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-plz-2026-07-11T00-40-42Z
Open

chore: release v0.41.0#2100
github-actions[bot] wants to merge 1 commit into
mainfrom
release-plz-2026-07-11T00-40-42Z

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

🤖 New release

  • rig-derive: 0.40.0 -> 0.41.0
  • rig-core: 0.40.0 -> 0.41.0 (⚠ API breaking changes)
  • rig-bedrock: 0.40.0 -> 0.41.0 (✓ API compatible changes)
  • rig-candle: 0.1.0 -> 0.41.0
  • rig-fastembed: 0.40.0 -> 0.41.0
  • rig-gemini-grpc: 0.40.0 -> 0.41.0 (✓ API compatible changes)
  • rig-helixdb: 0.40.0 -> 0.41.0
  • rig-lancedb: 0.40.0 -> 0.41.0 (✓ API compatible changes)
  • rig-memory: 0.40.0 -> 0.41.0 (✓ API compatible changes)
  • rig-milvus: 0.40.0 -> 0.41.0
  • rig-mongodb: 0.40.0 -> 0.41.0
  • rig-neo4j: 0.40.0 -> 0.41.0
  • rig-postgres: 0.40.0 -> 0.41.0
  • rig-qdrant: 0.40.0 -> 0.41.0
  • rig-s3vectors: 0.40.0 -> 0.41.0 (✓ API compatible changes)
  • rig-scylladb: 0.40.0 -> 0.41.0
  • rig-sqlite: 0.40.0 -> 0.41.0
  • rig-surrealdb: 0.40.0 -> 0.41.0 (✓ API compatible changes)
  • rig-vectorize: 0.40.0 -> 0.41.0
  • rig-vertexai: 0.40.0 -> 0.41.0 (✓ API compatible changes)
  • rig: 0.40.0 -> 0.41.0 (✓ API compatible changes)

rig-core breaking changes

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field Reasoning.mode in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/responses_api/mod.rs:1786
  field Reasoning.context in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/responses_api/mod.rs:1790
  field StreamingCompletionResponse.reasoning_metadata in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/responses_api/streaming.rs:44
  field StreamingCompletionResponse.reasoning_context in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/responses_api/streaming.rs:47
  field FunctionResponse.id in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/gemini/completion.rs:1277
  field CompletionRequest.record_telemetry_content in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/request.rs:675
  field CompletionRequest.record_telemetry_content in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/request.rs:675
  field CompletionResponse.reasoning_metadata in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/responses_api/mod.rs:1480
  field CompletionResponse.reasoning_context in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/responses_api/mod.rs:1486
  field ApiErrorResponse.error in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/gemini/client.rs:230
  field FunctionCall.id in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/gemini/completion.rs:1254

--- failure copy_impl_added: type now implements Copy ---

Description:
A public type now implements Copy, causing non-move closures to capture it by reference instead of moving it.
        ref: https://github.com/rust-lang/rust/issues/100905
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/copy_impl_added.ron

Failed in:
  rig_core::providers::copilot::EncodingFormat in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/embedding.rs:88
  rig_core::providers::openai::embedding::EncodingFormat in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/embedding.rs:88
  rig_core::providers::openai::EncodingFormat in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/embedding.rs:88

--- failure enum_marked_non_exhaustive: enum marked #[non_exhaustive] ---

Description:
A public enum has been marked #[non_exhaustive]. Pattern-matching on it outside of its crate must now include a wildcard pattern like `_`, or it will fail to compile.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#attr-adding-non-exhaustive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/enum_marked_non_exhaustive.ron

Failed in:
  enum StructuredOutputError in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/request.rs:236
  enum StructuredOutputError in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/request.rs:236
  enum StructuredOutputError in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/request.rs:236
  enum VectorStoreError in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/vector_store/mod.rs:34
  enum PromptError in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/request.rs:147
  enum PromptError in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/request.rs:147
  enum PromptError in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/request.rs:147

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/enum_missing.ron

Failed in:
  enum rig_core::agent::hook::InvalidToolCallHookAction, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/hook.rs:406
  enum rig_core::agent::InvalidToolCallHookAction, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/hook.rs:406
  enum rig_core::tool::ToolOutcome, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/result.rs:255
  enum rig_core::tool::ToolReturnOutcome, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/result.rs:356
  enum rig_core::tool::ToolFailureKind, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/result.rs:30
  enum rig_core::tool::ToolSetError, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:535
  enum rig_core::agent::hook::Flow, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/hook.rs:905
  enum rig_core::agent::Flow, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/hook.rs:905
  enum rig_core::providers::openrouter::EncodingFormat, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/openrouter/embedding.rs:20
  enum rig_core::providers::openrouter::embedding::EncodingFormat, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/openrouter/embedding.rs:20
  enum rig_core::agent::hook::StepEvent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/hook.rs:458
  enum rig_core::agent::StepEvent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/hook.rs:458
  enum rig_core::tool::ToolError, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:47
  enum rig_core::providers::together::client::together_ai_api_types::ApiResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/client.rs:114

--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant Content::ToolResult 5 -> 6 in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/anthropic/completion.rs:321
  variant Content::Document 6 -> 7 in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/anthropic/completion.rs:330
  variant Content::Thinking 7 -> 8 in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/anthropic/completion.rs:348
  variant Content::RedactedThinking 8 -> 9 in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/anthropic/completion.rs:353

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/enum_variant_added.ron

Failed in:
  variant McpClientError:ToolFetchTimeout in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/rmcp.rs:549
  variant MockStreamEvent:Unknown in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/test_utils/streaming.rs:81
  variant ReasoningEffort:Max in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/openai/responses_api/mod.rs:1891
  variant ExtractionError:PromptError in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/extractor.rs:67
  variant Content:CodeExecutionToolResult in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/providers/anthropic/completion.rs:317
  variant ToolResultContent:Json in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/message.rs:230
  variant ToolResultContent:Json in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/completion/message.rs:230

--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/enum_variant_missing.ron

Failed in:
  variant MultiTurnStreamItem::ToolExecutionStart, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/prompt_request/streaming.rs:74
  variant MultiTurnStreamItem::ToolExecutionStart, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/prompt_request/streaming.rs:74
  variant McpClientError::ToolServerError, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/rmcp.rs:418
  variant ToolServerError::ToolsetError, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/server.rs:372
  variant StreamingError::Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/prompt_request/streaming.rs:261
  variant PromptError::ToolError, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:155
  variant PromptError::ToolServerError, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:159
  variant PromptError::ToolError, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:155
  variant PromptError::ToolServerError, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:159
  variant PromptError::ToolError, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:155
  variant PromptError::ToolServerError, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:159

--- failure function_requires_different_generic_type_params: function now requires a different number of generic type parameters ---

Description:
A function now requires a different number of generic type parameters than it used to. Uses of this function that supplied the previous number of generic types (e.g. via turbofish syntax) will be broken.
        ref: https://doc.rust-lang.org/reference/items/generics.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/function_requires_different_generic_type_params.ron

Failed in:
  function tool_definition (0 -> 1 generic types) in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/mod.rs:388

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/inherent_method_missing.ron

Failed in:
  AgentBuilder::dynamic_context, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/builder.rs:182
  AgentBuilder::tools, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/builder.rs:385
  AgentBuilder::tools, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/builder.rs:619
  ExtractorBuilder::dynamic_context, previously in file /tmp/.tmpIEYhaA/rig-core/src/extractor.rs:386
  ToolSet::from_tools_boxed, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:575
  ToolSet::add_tool_boxed, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:600
  ToolSet::call, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:661
  ToolSet::call_with_extensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:671
  ToolSet::call_structured, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:695
  ToolSet::from_tools_boxed, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:575
  ToolSet::add_tool_boxed, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:600
  ToolSet::call, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:661
  ToolSet::call_with_extensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:671
  ToolSet::call_structured, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:695
  ToolServer::dynamic_tools, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/server.rs:123
  TypedPromptRequest::tool_extensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/prompt_request/mod.rs:665
  StreamingPromptRequest::tool_extensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/prompt_request/streaming.rs:348
  PromptRequest::tool_extensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/prompt_request/mod.rs:172
  AgentRunner::tool_extensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/runner.rs:361
  AgentRunner::tool_extensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/runner.rs:361
  ToolServerHandle::call_tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/server.rs:188
  ToolServerHandle::call_tool_with_extensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/server.rs:199
  ToolServerHandle::call_tool_structured, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/server.rs:236
  ToolSchema::from_tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/embeddings/tool.rs:95
  ToolSchema::from_tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/embeddings/tool.rs:95
  ToolResultContent::from_tool_output, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/message.rs:929
  ToolResultContent::from_tool_output, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/message.rs:929

--- failure inherent_method_now_returns_unit: inherent method now returns unit ---

Description:
A publicly-visible method that used to return a value now returns `()`.
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/inherent_method_now_returns_unit.ron
Failed in:
  rig_core::tool::server::ToolServerHandle::add_tool in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/server.rs:235
  rig_core::tool::server::ToolServerHandle::append_toolset in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/server.rs:381
  rig_core::tool::server::ToolServerHandle::remove_tool in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/server.rs:393

--- failure method_parameter_count_changed: pub method parameter count changed ---

Description:
A publicly-visible method now takes a different number of parameters, not counting the receiver (self) parameter.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/method_parameter_count_changed.ron

Failed in:
  rig_core::agent::AgentBuilder::dynamic_tools takes 3 parameters in /tmp/.tmpIEYhaA/rig-core/src/agent/builder.rs:519, but now takes [1, 1] parameters in [ /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/builder.rs:396 , /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/builder.rs:638 ]
  rig_core::agent::AgentBuilder::dynamic_tools takes 3 parameters in /tmp/.tmpIEYhaA/rig-core/src/agent/builder.rs:670, but now takes [1, 1] parameters in [ /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/builder.rs:396 , /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/builder.rs:638 ]

--- failure method_receiver_ref_became_mut: method receiver changed from immutable to mutable reference ---

Description:
A method's receiver changed from an immutable reference to a mutable one.
        ref: https://doc.rust-lang.org/reference/items/associated-items.html#methods
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/method_receiver_ref_became_mut.ron

Failed in:
  rig_core::streaming::StreamingCompletionResponse::cancel now takes &mut Self, not &Self, in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/streaming.rs:286

--- failure method_requires_different_generic_type_params: method now requires a different number of generic type parameters ---

Description:
A method now requires a different number of generic type parameters than it used to. Uses of this method that supplied the previous number of generic types will be broken.
        ref: https://doc.rust-lang.org/reference/items/generics.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/method_requires_different_generic_type_params.ron

Failed in:
  rig_core::agent::AgentBuilder::tool takes [1, 1] generic types instead of 0, in [ /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/builder.rs:357 , /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/builder.rs:623 ]
  rig_core::agent::AgentBuilder::tool takes [1, 1] generic types instead of 0, in [ /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/builder.rs:357 , /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/builder.rs:623 ]
  rig_core::prelude::ToolSet::from_tools takes 1 generic types instead of 0, in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/mod.rs:517
  rig_core::prelude::ToolSet::add_tool takes 1 generic types instead of 0, in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/mod.rs:548
  rig_core::tool::ToolSet::from_tools takes 1 generic types instead of 0, in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/mod.rs:517
  rig_core::tool::ToolSet::add_tool takes 1 generic types instead of 0, in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/mod.rs:548
  rig_core::tool::ToolSetBuilder::static_tool takes 1 generic types instead of 0, in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/mod.rs:686
  rig_core::tool::server::ToolServerHandle::add_tool takes 1 generic types instead of 0, in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/server.rs:235

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/module_missing.ron

Failed in:
  mod rig_core::providers::together::client::together_ai_api_types, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/client.rs:97

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/struct_missing.ron

Failed in:
  struct rig_core::tool::rmcp::McpTool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/rmcp.rs:84
  struct rig_core::providers::mistral::client::ApiErrorResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/mistral/client.rs:221
  struct rig_core::providers::mistral::ApiErrorResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/mistral/client.rs:221
  struct rig_core::providers::mistral::embedding::EmbeddingResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/mistral/embedding.rs:127
  struct rig_core::providers::mistral::EmbeddingResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/mistral/embedding.rs:127
  struct rig_core::providers::together::embedding::Usage, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/embedding.rs:44
  struct rig_core::providers::together::Usage, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/embedding.rs:44
  struct rig_core::tool::MissingExtension, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/extensions.rs:408
  struct rig_core::providers::openrouter::EmbeddingData, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/openrouter/embedding.rs:26
  struct rig_core::providers::openrouter::embedding::EmbeddingData, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/openrouter/embedding.rs:26
  struct rig_core::tool::ToolExecutionResult, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/result.rs:421
  struct rig_core::tool::rmcp::McpToolError, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/rmcp.rs:163
  struct rig_core::providers::together::embedding::EmbeddingResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/embedding.rs:30
  struct rig_core::providers::together::EmbeddingResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/embedding.rs:30
  struct rig_core::providers::together::client::together_ai_api_types::ApiErrorResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/client.rs:107
  struct rig_core::tool::ToolFailure, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/result.rs:113
  struct rig_core::providers::together::embedding::EmbeddingModel, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/embedding.rs:50
  struct rig_core::providers::together::EmbeddingModel, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/embedding.rs:50
  struct rig_core::tool::ToolReturn, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/result.rs:548
  struct rig_core::tool::ToolCallExtensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/extensions.rs:229
  struct rig_core::providers::mistral::embedding::EmbeddingData, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/mistral/embedding.rs:136
  struct rig_core::providers::mistral::EmbeddingData, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/mistral/embedding.rs:136
  struct rig_core::providers::openrouter::EmbeddingModel, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/openrouter/embedding.rs:33
  struct rig_core::providers::openrouter::embedding::EmbeddingModel, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/openrouter/embedding.rs:33
  struct rig_core::providers::openrouter::EmbeddingResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/openrouter/embedding.rs:10
  struct rig_core::providers::openrouter::embedding::EmbeddingResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/openrouter/embedding.rs:10
  struct rig_core::providers::mistral::embedding::EmbeddingModel, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/mistral/embedding.rs:19
  struct rig_core::providers::mistral::EmbeddingModel, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/mistral/embedding.rs:19
  struct rig_core::test_utils::MockExtensionsProbeTool, previously in file /tmp/.tmpIEYhaA/rig-core/src/test_utils/tools.rs:76
  struct rig_core::providers::together::embedding::EmbeddingData, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/embedding.rs:37
  struct rig_core::providers::together::EmbeddingData, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/together/embedding.rs:37
  struct rig_core::tool::ToolResultExtensions, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/extensions.rs:338

--- failure struct_pub_field_missing: pub struct's pub field removed or renamed ---

Description:
A publicly-visible struct has at least one public field that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/struct_pub_field_missing.ron

Failed in:
  field name of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:648
  field description of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:650
  field model of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:652
  field preamble of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:654
  field static_context of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:656
  field temperature of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:658
  field max_tokens of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:660
  field additional_params of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:662
  field tool_server_handle of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:663
  field dynamic_context of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:665
  field tool_choice of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:667
  field default_max_turns of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:670
  field hooks of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:673
  field output_schema of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:676
  field output_mode of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:679
  field memory of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:681
  field default_conversation_id of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:683
  field name of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:648
  field description of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:650
  field model of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:652
  field preamble of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:654
  field static_context of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:656
  field temperature of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:658
  field max_tokens of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:660
  field additional_params of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:662
  field tool_server_handle of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:663
  field dynamic_context of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:665
  field tool_choice of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:667
  field default_max_turns of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:670
  field hooks of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:673
  field output_schema of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:676
  field output_mode of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:679
  field memory of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:681
  field default_conversation_id of struct Agent, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/completion.rs:683
  field message of struct ApiErrorResponse, previously in file /tmp/.tmpIEYhaA/rig-core/src/providers/gemini/client.rs:229

--- failure struct_pub_field_now_doc_hidden: pub struct field is now #[doc(hidden)] ---

Description:
A pub field of a pub struct is now marked #[doc(hidden)] and is no longer part of the public API.
        ref: https://doc.rust-lang.org/rustdoc/write-documentation/the-doc-attribute.html#hidden
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/struct_pub_field_now_doc_hidden.ron

Failed in:
  field Agent.name in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.description in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.model in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.preamble in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.static_context in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.temperature in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.max_tokens in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.additional_params in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.tool_server_handle in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.tool_choice in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.default_max_turns in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.hooks in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.output_schema in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.output_mode in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.memory in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.default_conversation_id in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.name in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.description in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.model in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.preamble in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.static_context in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.temperature in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.max_tokens in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.additional_params in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.tool_server_handle in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.tool_choice in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.default_max_turns in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.hooks in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.output_schema in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.output_mode in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.memory in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555
  field Agent.default_conversation_id in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/completion.rs:555

--- failure trait_allows_fewer_generic_type_params: trait now allows fewer generic type parameters ---

Description:
A trait now allows fewer generic type parameters than it used to. Uses of this trait that supplied all previously-supported generic types will be broken.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-parameter-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/trait_allows_fewer_generic_type_params.ron

Failed in:
  trait AgentHook allows 1 -> 0 generic types in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/hook.rs:916
  trait AgentHook allows 1 -> 0 generic types in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/hook.rs:916

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-item-signature
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/trait_method_missing.ron

Failed in:
  method on_event of trait AgentHook, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/hook.rs:1165
  method on_event of trait AgentHook, previously in file /tmp/.tmpIEYhaA/rig-core/src/agent/hook.rs:1165
  method name of trait Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:146
  method call_with_extensions of trait Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:181
  method classify_error of trait Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:210
  method call_structured of trait Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:236
  method name of trait Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:146
  method call_with_extensions of trait Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:181
  method classify_error of trait Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:210
  method call_structured of trait Tool, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:236

--- failure trait_method_parameter_count_changed: pub trait method parameter count changed ---

Description:
A trait method now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-item-signature
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/trait_method_parameter_count_changed.ron

Failed in:
  Tool::call now takes 2 instead of 1 parameters, in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/mod.rs:176
  Tool::call now takes 2 instead of 1 parameters, in file /tmp/.tmpmmkLm7/rig/crates/rig-core/src/tool/mod.rs:176

--- failure trait_missing: pub trait removed or renamed ---

Description:
A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/trait_missing.ron

Failed in:
  trait rig_core::tool::ToolDyn, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:281
  trait rig_core::tool::ToolEmbeddingDyn, previously in file /tmp/.tmpIEYhaA/rig-core/src/tool/mod.rs:468
  trait rig_core::streaming::StreamingCompletion, previously in file /tmp/.tmpIEYhaA/rig-core/src/streaming.rs:625
  trait rig_core::completion::request::Completion, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:462
  trait rig_core::completion::Completion, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:462
  trait rig_core::prelude::Completion, previously in file /tmp/.tmpIEYhaA/rig-core/src/completion/request.rs:462

--- failure type_allows_fewer_generic_type_params: type now allows fewer generic type parameters ---

Description:
A type now allows fewer generic type parameters than it used to. Uses of this type that supplied all previously-supported generic types will be broken.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#trait-new-parameter-no-default
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/type_allows_fewer_generic_type_params.ron

Failed in:
  Struct HookStack allows 1 -> 0 generic types in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/hook.rs:1168
  Struct HookStack allows 1 -> 0 generic types in /tmp/.tmpmmkLm7/rig/crates/rig-core/src/agent/hook.rs:1168
Changelog

rig-derive

0.41.0 - 2026-07-18

Other

Contributors

Changed

  • (rig-derive) [breaking] generated #[rig_tool] implementations now target the single Tool::call API with ToolContext and preserve the function's Result<T, E> error as Tool::Error until erased dispatch normalizes it. A tool function may accept one &mut ToolContext parameter in any position; fully qualified rig::tool::ToolContext / rig_core::tool::ToolContext paths are recognized directly, while imported names and aliases use #[rig(context)]. The macro forwards the runtime context and excludes that parameter from the generated arguments and JSON Schema without confusing unrelated application types also named ToolContext.

rig-core

0.41.0 - 2026-07-18

Added

Fixed

Other

Contributors

Changed

  • (agent) [breaking] Remove the completion-model parameter from
    AgentHook, HookStack, and the erased hook interface. Managed response
    hooks now receive canonical Rig lifecycle fields (prompt, content,
    usage, and message_id) through non-generic CompletionResponse and
    StreamResponseFinish events. This lets one concrete hook attach to agents
    backed by different providers. Typed raw provider responses remain available
    from direct CompletionModel completion and streaming APIs.

    // Before
    impl<M: CompletionModel> AgentHook<M> for TelemetryHook { /* ... */ }
    
    // After
    impl AgentHook for TelemetryHook { /* ... */ }
  • (agent) [breaking] Remove AgentBuilder::dynamic_context,
    ExtractorBuilder::dynamic_context, and the internal DynamicContextStore
    passive-retrieval pipeline. Static builder context remains available. Rig no
    longer imposes passive-retrieval query selection, retrieval, filtering,
    reranking, formatting, caching, failure handling, or per-turn policy; those
    decisions belong in an application-defined AgentHook.

    Migration example:

    // Application code: Rig does not provide AppRetrievalHook.
    struct AppRetrievalHook<I> {
        index: I,
        samples: u64,
    }
    
    impl<I> AgentHook for AppRetrievalHook<I>
    where
        I: VectorStoreIndexDyn,
    {
        async fn on_completion_call(
            &self,
            _ctx: &HookContext,
            event: CompletionCallEvent<'_>,
        ) -> CompletionCallAction {
            let message_text = |message: &Message| match message {
                Message::User { content } => content.iter().find_map(|part| match part {
                    UserContent::Text(text) => Some(text.text.clone()),
                    _ => None,
                }),
                _ => None,
            };
            let Some(query) = message_text(event.prompt)
                .or_else(|| event.history.iter().rev().find_map(message_text))
            else {
                return CompletionCallAction::continue_run();
            };
    
            let request = VectorSearchRequest::builder()
                .query(query)
                .samples(self.samples)
                .build();
            match self.index.top_n(request).await {
                Ok(results) => {
                    let documents = results.into_iter().map(|(_, id, value)| Document {
                        id,
                        text: serde_json::to_string_pretty(&value)
                            .unwrap_or_else(|_| value.to_string()),
                        additional_props: Default::default(),
                    });
                    CompletionCallAction::patch(
                        RequestPatch::new().extra_context(documents),
                    )
                }
                Err(error) => CompletionCallAction::stop(
                    format!("application retrieval failed: {error}"),
                ),
            }
        }
    }
    
    // Before
    let agent = client.agent(model).dynamic_context(3, index).build();
    
    // After
    let agent = client
        .agent(model)
        .add_hook(AppRetrievalHook { index, samples: 3 })
        .build();

    CompletionCallAction::patch(RequestPatch::new().extra_context(documents))
    appends application-retrieved documents after static context. Returning
    CompletionCallAction::stop(...) on retrieval failure prevents provider I/O
    for that turn. The same hook-aware AgentRunner lifecycle powers blocking,
    streaming, and extractor execution; register the local hook with
    ExtractorBuilder::add_hook for extraction. Multiple hook context patches
    append in registration order. For active RAG, expose an index through its
    blanket Tool implementation or provide a custom retriever tool so the model
    decides whether and when to retrieve.

  • (agent) [breaking] Make AgentRunner the only execution path for configured agents: remove the raw Completion and StreamingCompletion traits and their Agent implementations, make agent execution state private, add runner-backed per-request overrides, and route Extractor through the full hook lifecycle. Raw hook-free requests remain available explicitly through CompletionModel.

    Migration examples:

    // Before: built a one-shot request from configured Agent state, but bypassed
    // the AgentRunner lifecycle.
    agent.completion(prompt, history).await?.send().await?;
    
    // After, for managed Agent execution: hooks, tools, retrieval, memory, and
    // turn accounting all run. Budget enough calls for tool follow-ups.
    agent
        .runner(prompt)
        .history(history)
        .max_turns(3)
        .run()
        .await?;

    Streaming follows the same boundary:

    // Before
    agent.stream_completion(prompt, history).await?.stream().await?;
    
    // After
    let stream = agent
        .runner(prompt)
        .history(history)
        .max_turns(3)
        .stream()
        .await;

    The runner consumes tool calls instead of returning the first raw model
    response. If the old caller handled that response itself, or for any other
    intentionally hook-free provider transport, start from the model rather than
    an Agent:

    model
        .completion_request(prompt)
        .messages(history)
        .send()
        .await?;
    
    let stream = model
        .completion_request(prompt)
        .messages(history)
        .stream()
        .await?;

    AgentRun::new(prompt).with_history(history) remains the public sans-I/O
    state machine for custom drivers. It contains no model, tools, memory, or hook
    stack: callers must handle every AgentRunStep, perform provider/tool IO, and
    feed results back explicitly. It is not a way to execute a configured
    Agent; use AgentRunner for that.

    An Agent also keeps its configured model private and fixed. Applications
    that previously called .model(...) or .model_opt(...) on the returned raw
    request builder should retain the provider CompletionModel and use its raw
    request API, or construct a separate Agent for that model selection.

  • (providers) [breaking] Move Together, OpenRouter, and Mistral embeddings onto the shared GenericEmbeddingModel, with provider-specific endpoint and typed request-shaping hooks. Together now forwards configured embedding dimensions, Mistral maps Codestral Embed dimensions to output_dimension while rejecting dimensions for fixed-size models, compatible providers may omit usage without weakening OpenAI's public response type, and Base64 response encoding is rejected before sending because the shared parser accepts numeric vectors. Remove the superseded provider-specific embedding response/data types, Together's API envelope module, and OpenRouter's duplicate EncodingFormat.

  • (tool) [breaking] Replace the parallel tool-execution APIs with one structured path. Typed tools now implement only Tool::call(&mut ToolContext, Args) -> Result<Output, Error>; author-facing errors remain typed until private runtime erasure normalizes them into ToolExecutionError, ToolContext carries inbound values and host-only result metadata, ToolResult is the single runtime observation, and ToolSet::execute / ToolServerHandle::execute are the dispatch surfaces. Event-specific hook action types make invalid event/action combinations unrepresentable.

    • Tool implementations: retain one typed type Error for ordinary ? propagation and direct-call tests; remove classify_error, call_with_extensions, and call_structured. The optional map_error method classifies domain failures at the erased boundary, while its default preserves the source as Other. Return refusals through map_error with ToolExecutionError::refused, and attach host-only result metadata with ToolContext::insert_result.
    • Context: replace ToolCallExtensions and ToolResultExtensions with ToolContext; replace request/runner .tool_extensions(...) with .tool_context(...). Each dispatch snapshots inbound context exactly once, isolates tool-local mutations, and publishes only result metadata back to the caller and hooks.
    • Dynamic tools: ToolDyn is removed from the public API; use DynamicTool for runtime-defined tools. Rig's erased dispatch trait is private. Typed tools use Tool::NAME as their sole identity; runtime-named agents convert explicitly with Agent::into_tool().
    • Registration vocabulary: AgentBuilder::tools(Vec<Box<dyn ToolDyn>>) is removed; use repeated .tool(...) calls for typed tools or dynamic_tools(Vec<DynamicTool>) for runtime-defined callbacks. Retrieval-backed dynamic_tools(sample, index, toolset) becomes retrieved_tools. On ToolSetBuilder, static_tool remains the typed-tool path, the former embedding-backed dynamic_tool(ToolEmbedding) becomes retrieved_tool, and runtime-defined callbacks use dynamic_tool(DynamicTool).
    • Results and errors: replace ToolError, ToolFailure, ToolFailureKind, ToolReturn, ToolReturnOutcome, ToolExecutionResult, and ToolOutcome with ToolExecutionError, ToolErrorKind, and the read-only ToolResult observed by hooks.
    • Model presentation: serializable outputs convert once into canonical ToolOutput content blocks; strings remain literal text, explicit serde_json::Value values remain JSON, and multimodal tools use ToolOutput::content / ToolOutput::one or return typed ToolResultContent directly. Result hooks now rewrite ToolOutput, provider adapters preserve native JSON where supported or render it only at their terminal wire boundary, mixed user/tool-result blocks retain order, and Rig never reparses strings to infer rich content. Consumers can inspect ToolResultContent with as_text / as_json and explicitly decode either structured JSON or legacy JSON-bearing text with deserialize_json.
    • Error presentation: explicit ToolExecutionError constructors keep actionable diagnostics model-visible, while the generic ToolExecutionError::from_error path preserves operator diagnostics and the concrete source but defaults to safe kind-level model feedback. Use with_model_feedback for deliberate replacement text or with_model_output for JSON/multimodal feedback. MCP responses preserve ordered supported text/image content, retain unsupported and future blocks as typed JSON, and attach raw CallToolResult, structuredContent, and response metadata to ToolContext. MCP list installation and refresh are atomic and ownership-aware, so stale handlers cannot replace or remove newer registrations, while disconnected owners are retired during refresh, provider exposure, or direct dispatch.
    • Dispatch: replace ToolSet::{call, call_with_extensions, call_structured} with ToolSet::execute; replace ToolServerHandle::{call_tool, call_tool_with_extensions, call_tool_structured} with ToolServerHandle::execute.
    • Registration and definitions: ToolSet is the single ordered registry and records whether each tool is always advertised or retrieval-only. ToolSet::{get_tool_definitions, documents} are now synchronous and infallible, ToolServerHandle registration/removal methods no longer return an artificial Result, and the obsolete ToolSetError is removed.
    • Hooks: replace AgentHook::on_event, StepEvent, and Flow with the event-specific AgentHook methods and their corresponding action types (CompletionCallAction, ToolCallAction, ToolResultAction, InvalidToolCallAction, and ObservationAction). Result rewrites replace the effective model and result-content telemetry presentation while preserving the raw ToolResult and ToolContext for policy; result stops omit result-content telemetry. Invalid-tool hooks return None to defer; every explicit action, including Fail, is terminal for that hook stack.
    • Streaming execution observation: the atomically surfaced post-batch event is named ToolExecutionCommitted, reflecting that it is not a real-time start notification. Applications that need live host lifecycle events should observe on_tool_call / on_tool_result; typed result metadata remains available through ToolResultEvent::tool_context without entering model-facing messages.
  • (core) [breaking] Mark PromptError, StructuredOutputError, and VectorStoreError as non-exhaustive, requiring downstream match expressions to include a wildcard arm. Conversation memory load failures now surface as the typed PromptError::MemoryError variant instead of CompletionError::RequestError.

rig-bedrock

0.41.0 - 2026-07-18

Added

Fixed

Other

Contributors

rig-candle

0.41.0 - 2026-07-18

Other

Contributors

rig-fastembed

0.38.1 - 2026-06-02

Other

Contributors

rig-gemini-grpc

0.40.0 - 2026-07-10

Added

Contributors

rig-helixdb

0.38.1 - 2026-06-02

Other

Contributors

rig-lancedb

0.41.0 - 2026-07-18

Other

Contributors

rig-memory

0.41.0 - 2026-07-18

Other

Contributors

rig-milvus

0.38.1 - 2026-06-02

Other

Contributors

rig-mongodb

0.38.1 - 2026-06-02

Other

Contributors

rig-neo4j

0.40.0 - 2026-07-10

Added

Contributors

Added

  • (neo4j) implement InsertDocuments for Neo4jVectorIndex — bulk-insert documents with precomputed embeddings via a single UNWIND Cypher write (one node per embedding, document fields flattened onto the node alongside embedded_text and the configured embedding property). Nodes are written under the index's label, which get_index now resolves from the index's labelsOrTypes (default Document); IndexConfig gains a node_label field + builder. (closes #1636)

rig-postgres

0.40.0 - 2026-07-10

Fixed

Contributors

rig-qdrant

0.38.1 - 2026-06-02

Other

Contributors

rig-s3vectors

0.41.0 - 2026-07-18

Fixed

Contributors

rig-scylladb

0.38.1 - 2026-06-02

Other

Contributors

rig-sqlite

0.40.0 - 2026-07-10

Other

Contributors

rig-surrealdb

0.41.0 - 2026-07-18

Other

Contributors

rig-vectorize

0.38.1 - 2026-06-02

Other

Contributors

rig-vertexai

0.41.0 - 2026-07-18

Added

Other

Contributors

rig

0.41.0 - 2026-07-18

Added

Fixed

Other

@github-actions github-actions Bot changed the title chore: release v0.40.0 chore: release v0.40.1 Jul 11, 2026
@github-actions
github-actions Bot force-pushed the release-plz-2026-07-11T00-40-42Z branch 5 times, most recently from 94b404f to d9996d8 Compare July 11, 2026 21:51
@github-actions github-actions Bot changed the title chore: release v0.40.1 chore: release v0.41.0 Jul 11, 2026
@github-actions
github-actions Bot force-pushed the release-plz-2026-07-11T00-40-42Z branch 17 times, most recently from bf455f4 to 886c14e Compare July 17, 2026 04:16

Copy link
Copy Markdown

Hi! Do you have a rough estimate for when v0.41.0 might be published to crates.io? My application is currently waiting on the GPT-5.6 support included in this release. No pressure at all—thank you for all the work you put into Rig and for maintaining such a great project!

@github-actions
github-actions Bot force-pushed the release-plz-2026-07-11T00-40-42Z branch 2 times, most recently from fe5d751 to 9c8b86c Compare July 17, 2026 20:46
@github-actions
github-actions Bot force-pushed the release-plz-2026-07-11T00-40-42Z branch from 9c8b86c to b9f28f4 Compare July 18, 2026 06:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant