riffer 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.agents/architecture.md +1 -1
- data/.release-please-manifest.json +1 -1
- data/CHANGELOG.md +7 -0
- data/docs/13_SKILLS.md +1 -1
- data/lib/riffer/agent.rb +1 -1
- data/lib/riffer/providers/amazon_bedrock.rb +18 -0
- data/lib/riffer/providers/anthropic.rb +2 -2
- data/lib/riffer/providers/base.rb +7 -3
- data/lib/riffer/providers/mock.rb +15 -0
- data/lib/riffer/version.rb +1 -1
- data/sig/generated/riffer/providers/amazon_bedrock.rbs +15 -0
- data/sig/generated/riffer/providers/anthropic.rbs +2 -2
- data/sig/generated/riffer/providers/base.rbs +7 -3
- data/sig/generated/riffer/providers/mock.rbs +12 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4097cc002e3ac3c06c0e354fddd33de5c5fb7b51ed53c6080478de972125b8b7
|
|
4
|
+
data.tar.gz: eed8cf5ed60830b206e00ef62640aa691aa9b32140c2ec5852b69d39fb775e5f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f6d511f5de22e4a04521ac1c12e26aa7f508a6b0c2649e124447995c64a4b3d66a9a6cace08869db7f66c129bb38aa1f169fde5c42e3a6b8612be07b81e320d7
|
|
7
|
+
data.tar.gz: 03c5075c171920a16245b73ab1925a4013f029d5aabe686fdd3a904886c8113837c11a8584f4b1243517c7935f1ae8216882101d63803c1ad25c209353a64612
|
data/.agents/architecture.md
CHANGED
|
@@ -40,7 +40,7 @@ Adapters for LLM APIs. The base class uses a template-method pattern — `genera
|
|
|
40
40
|
|
|
41
41
|
Providers are registered in `Riffer::Providers::Repository::REPO` with identifiers (e.g., `openai`, `amazon_bedrock`).
|
|
42
42
|
|
|
43
|
-
Each provider declares a preferred skill adapter via `self.skills_adapter
|
|
43
|
+
Each provider declares a preferred skill adapter via `self.skills_adapter(model = nil)`. Default is Markdown; Anthropic returns XML; Amazon Bedrock returns XML when the model identifier matches an Anthropic model (e.g. `anthropic.claude-…` or `us.anthropic.claude-…`); Mock returns XML when the model name contains `claude`. The agent passes the resolved model identifier so proxy providers (Bedrock, Mock) can pick the right adapter without per-agent overrides.
|
|
44
44
|
|
|
45
45
|
### Skills (`lib/riffer/skills/`)
|
|
46
46
|
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.26.0](https://github.com/janeapp/riffer/compare/riffer/v0.25.0...riffer/v0.26.0) (2026-04-29)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* model-aware skills adapter selection ([#232](https://github.com/janeapp/riffer/issues/232)) ([74a5323](https://github.com/janeapp/riffer/commit/74a5323945f3f6f30538d472400cc5fe27b588da))
|
|
14
|
+
|
|
8
15
|
## [0.25.0](https://github.com/janeapp/riffer/compare/riffer/v0.24.2...riffer/v0.25.0) (2026-04-29)
|
|
9
16
|
|
|
10
17
|
|
data/docs/13_SKILLS.md
CHANGED
|
@@ -70,7 +70,7 @@ end
|
|
|
70
70
|
|
|
71
71
|
### Custom Adapter
|
|
72
72
|
|
|
73
|
-
The adapter controls how the skill catalog is rendered in the system prompt and which tool the LLM calls to activate a skill. The adapter is auto-selected by provider
|
|
73
|
+
The adapter controls how the skill catalog is rendered in the system prompt and which tool the LLM calls to activate a skill. The adapter is auto-selected by provider, with model-aware fallback for proxy providers — Markdown for most providers, XML for Anthropic, and XML for Anthropic models routed through Amazon Bedrock (e.g. `us.anthropic.claude-sonnet-4-6`). Override with:
|
|
74
74
|
|
|
75
75
|
```ruby
|
|
76
76
|
skills do
|
data/lib/riffer/agent.rb
CHANGED
|
@@ -799,7 +799,7 @@ class Riffer::Agent
|
|
|
799
799
|
return nil if skills_list.empty?
|
|
800
800
|
|
|
801
801
|
skills = skills_list.to_h { |s| [s.name, s] }
|
|
802
|
-
adapter_class = self.class.skills.adapter || provider_class.skills_adapter
|
|
802
|
+
adapter_class = self.class.skills.adapter || provider_class.skills_adapter(@model_name)
|
|
803
803
|
skill_activate_tool_class = self.class.skills.activate_tool || Riffer.config.skills.default_activate_tool
|
|
804
804
|
|
|
805
805
|
skills_context = Riffer::Skills::Context.new(
|
|
@@ -9,6 +9,24 @@ require "base64"
|
|
|
9
9
|
#
|
|
10
10
|
# See https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/BedrockRuntime/Client.html
|
|
11
11
|
class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
12
|
+
# Matches Anthropic models on Bedrock: bare ids like
|
|
13
|
+
# +anthropic.claude-3-5-sonnet-20241022-v2:0+ and cross-region prefixed
|
|
14
|
+
# ids like +us.anthropic.claude-sonnet-4-6+.
|
|
15
|
+
ANTHROPIC_MODEL_PATTERN = /(?:^|\.)anthropic\./ #: Regexp
|
|
16
|
+
|
|
17
|
+
# Returns the preferred skill adapter for the given Bedrock model.
|
|
18
|
+
#
|
|
19
|
+
# Bedrock hosts models from multiple vendors. Anthropic models prefer
|
|
20
|
+
# XML-rendered catalogs; everything else falls back to the default
|
|
21
|
+
# Markdown adapter.
|
|
22
|
+
#
|
|
23
|
+
#--
|
|
24
|
+
#: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
25
|
+
def self.skills_adapter(model = nil)
|
|
26
|
+
return Riffer::Skills::XmlAdapter if model && ANTHROPIC_MODEL_PATTERN.match?(model)
|
|
27
|
+
Riffer::Skills::MarkdownAdapter
|
|
28
|
+
end
|
|
29
|
+
|
|
12
30
|
# Initializes the Amazon Bedrock provider.
|
|
13
31
|
#
|
|
14
32
|
#--
|
|
@@ -12,8 +12,8 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
|
|
|
12
12
|
# Returns the XML skill adapter for Anthropic/Claude.
|
|
13
13
|
#
|
|
14
14
|
#--
|
|
15
|
-
#: () -> singleton(Riffer::Skills::Adapter)
|
|
16
|
-
def self.skills_adapter
|
|
15
|
+
#: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
16
|
+
def self.skills_adapter(model = nil)
|
|
17
17
|
Riffer::Skills::XmlAdapter
|
|
18
18
|
end
|
|
19
19
|
|
|
@@ -24,11 +24,15 @@ class Riffer::Providers::Base
|
|
|
24
24
|
|
|
25
25
|
# Returns the preferred skill adapter for this provider.
|
|
26
26
|
#
|
|
27
|
-
# Override in subclasses for provider-specific formats.
|
|
27
|
+
# Override in subclasses for provider-specific formats. Subclasses may
|
|
28
|
+
# introspect +model+ (the resolved model identifier, e.g. the part after
|
|
29
|
+
# +provider/+) to pick an adapter that matches the underlying model
|
|
30
|
+
# family — useful for proxy providers like Amazon Bedrock that host
|
|
31
|
+
# models from multiple vendors.
|
|
28
32
|
#
|
|
29
33
|
#--
|
|
30
|
-
#: () -> singleton(Riffer::Skills::Adapter)
|
|
31
|
-
def self.skills_adapter
|
|
34
|
+
#: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
35
|
+
def self.skills_adapter(model = nil)
|
|
32
36
|
Riffer::Skills::MarkdownAdapter
|
|
33
37
|
end
|
|
34
38
|
|
|
@@ -5,6 +5,21 @@
|
|
|
5
5
|
#
|
|
6
6
|
# No external gems required.
|
|
7
7
|
class Riffer::Providers::Mock < Riffer::Providers::Base
|
|
8
|
+
# Returns the preferred skill adapter for the given mock model.
|
|
9
|
+
#
|
|
10
|
+
# Mock is used to stand in for any real provider in tests, so the model
|
|
11
|
+
# string itself is the only signal we have. When the model name contains
|
|
12
|
+
# +claude+ (e.g. +mock/claude-sonnet-4-6+), pick the XML adapter to
|
|
13
|
+
# mirror what a real Claude-backed provider would do; otherwise fall
|
|
14
|
+
# back to Markdown.
|
|
15
|
+
#
|
|
16
|
+
#--
|
|
17
|
+
#: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
18
|
+
def self.skills_adapter(model = nil)
|
|
19
|
+
return Riffer::Skills::XmlAdapter if model&.include?("claude")
|
|
20
|
+
Riffer::Skills::MarkdownAdapter
|
|
21
|
+
end
|
|
22
|
+
|
|
8
23
|
# Array of recorded method calls for assertions.
|
|
9
24
|
attr_reader :calls #: Array[Hash[Symbol, untyped]]
|
|
10
25
|
|
data/lib/riffer/version.rb
CHANGED
|
@@ -6,6 +6,21 @@
|
|
|
6
6
|
#
|
|
7
7
|
# See https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/BedrockRuntime/Client.html
|
|
8
8
|
class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
9
|
+
# Matches Anthropic models on Bedrock: bare ids like
|
|
10
|
+
# +anthropic.claude-3-5-sonnet-20241022-v2:0+ and cross-region prefixed
|
|
11
|
+
# ids like +us.anthropic.claude-sonnet-4-6+.
|
|
12
|
+
ANTHROPIC_MODEL_PATTERN: Regexp
|
|
13
|
+
|
|
14
|
+
# Returns the preferred skill adapter for the given Bedrock model.
|
|
15
|
+
#
|
|
16
|
+
# Bedrock hosts models from multiple vendors. Anthropic models prefer
|
|
17
|
+
# XML-rendered catalogs; everything else falls back to the default
|
|
18
|
+
# Markdown adapter.
|
|
19
|
+
#
|
|
20
|
+
# --
|
|
21
|
+
# : (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
22
|
+
def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
23
|
+
|
|
9
24
|
# Initializes the Amazon Bedrock provider.
|
|
10
25
|
#
|
|
11
26
|
# --
|
|
@@ -11,8 +11,8 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
|
|
|
11
11
|
# Returns the XML skill adapter for Anthropic/Claude.
|
|
12
12
|
#
|
|
13
13
|
# --
|
|
14
|
-
# : () -> singleton(Riffer::Skills::Adapter)
|
|
15
|
-
def self.skills_adapter: () -> singleton(Riffer::Skills::Adapter)
|
|
14
|
+
# : (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
15
|
+
def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
16
16
|
|
|
17
17
|
# Initializes the Anthropic provider.
|
|
18
18
|
#
|
|
@@ -22,11 +22,15 @@ class Riffer::Providers::Base
|
|
|
22
22
|
|
|
23
23
|
# Returns the preferred skill adapter for this provider.
|
|
24
24
|
#
|
|
25
|
-
# Override in subclasses for provider-specific formats.
|
|
25
|
+
# Override in subclasses for provider-specific formats. Subclasses may
|
|
26
|
+
# introspect +model+ (the resolved model identifier, e.g. the part after
|
|
27
|
+
# +provider/+) to pick an adapter that matches the underlying model
|
|
28
|
+
# family — useful for proxy providers like Amazon Bedrock that host
|
|
29
|
+
# models from multiple vendors.
|
|
26
30
|
#
|
|
27
31
|
# --
|
|
28
|
-
# : () -> singleton(Riffer::Skills::Adapter)
|
|
29
|
-
def self.skills_adapter: () -> singleton(Riffer::Skills::Adapter)
|
|
32
|
+
# : (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
33
|
+
def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
30
34
|
|
|
31
35
|
# Generates text using the provider.
|
|
32
36
|
#
|
|
@@ -4,6 +4,18 @@
|
|
|
4
4
|
#
|
|
5
5
|
# No external gems required.
|
|
6
6
|
class Riffer::Providers::Mock < Riffer::Providers::Base
|
|
7
|
+
# Returns the preferred skill adapter for the given mock model.
|
|
8
|
+
#
|
|
9
|
+
# Mock is used to stand in for any real provider in tests, so the model
|
|
10
|
+
# string itself is the only signal we have. When the model name contains
|
|
11
|
+
# +claude+ (e.g. +mock/claude-sonnet-4-6+), pick the XML adapter to
|
|
12
|
+
# mirror what a real Claude-backed provider would do; otherwise fall
|
|
13
|
+
# back to Markdown.
|
|
14
|
+
#
|
|
15
|
+
# --
|
|
16
|
+
# : (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
17
|
+
def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
18
|
+
|
|
7
19
|
# Array of recorded method calls for assertions.
|
|
8
20
|
attr_reader calls: Array[Hash[Symbol, untyped]]
|
|
9
21
|
|