riffer 0.30.0 → 0.32.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/code-style.md +63 -4
- data/.agents/rbs-inline.md +1 -6
- data/.release-please-manifest.json +1 -1
- data/AGENTS.md +1 -2
- data/CHANGELOG.md +25 -0
- data/docs/08_MESSAGES.md +1 -1
- data/docs/14_MCP.md +50 -5
- data/docs/15_SERIALIZATION.md +23 -12
- data/docs/providers/02_AMAZON_BEDROCK.md +14 -0
- data/lib/riffer/agent/config.rb +42 -47
- data/lib/riffer/agent/context.rb +70 -50
- data/lib/riffer/agent/response.rb +4 -20
- data/lib/riffer/agent/run.rb +28 -67
- data/lib/riffer/agent/serializer.rb +36 -85
- data/lib/riffer/agent/session/repair.rb +14 -40
- data/lib/riffer/agent/session.rb +25 -67
- data/lib/riffer/agent/structured_output/result.rb +3 -11
- data/lib/riffer/agent/structured_output.rb +5 -13
- data/lib/riffer/agent.rb +81 -199
- data/lib/riffer/config.rb +34 -101
- data/lib/riffer/evals/evaluator.rb +7 -27
- data/lib/riffer/evals/evaluator_runner.rb +11 -19
- data/lib/riffer/evals/judge.rb +4 -25
- data/lib/riffer/evals/result.rb +1 -18
- data/lib/riffer/evals/run_result.rb +0 -11
- data/lib/riffer/evals/scenario_result.rb +0 -14
- data/lib/riffer/evals.rb +0 -6
- data/lib/riffer/guardrail.rb +4 -27
- data/lib/riffer/guardrails/modification.rb +0 -10
- data/lib/riffer/guardrails/result.rb +3 -30
- data/lib/riffer/guardrails/runner.rb +5 -22
- data/lib/riffer/guardrails/tripwire.rb +1 -19
- data/lib/riffer/guardrails.rb +2 -4
- data/lib/riffer/helpers/call_or_value.rb +4 -3
- data/lib/riffer/helpers/class_name_converter.rb +3 -1
- data/lib/riffer/helpers/dependencies.rb +5 -7
- data/lib/riffer/helpers.rb +0 -5
- data/lib/riffer/mcp/authenticated_tool.rb +9 -9
- data/lib/riffer/mcp/client.rb +12 -17
- data/lib/riffer/mcp/manifest.rb +13 -10
- data/lib/riffer/mcp/registration.rb +2 -11
- data/lib/riffer/mcp/registry.rb +44 -52
- data/lib/riffer/mcp/search_tool.rb +53 -0
- data/lib/riffer/mcp/tool_factory.rb +13 -18
- data/lib/riffer/mcp.rb +12 -17
- data/lib/riffer/messages/assistant.rb +2 -9
- data/lib/riffer/messages/base.rb +46 -16
- data/lib/riffer/messages/file_part.rb +32 -24
- data/lib/riffer/messages/system.rb +0 -5
- data/lib/riffer/messages/tool.rb +0 -10
- data/lib/riffer/messages/user.rb +0 -10
- data/lib/riffer/messages.rb +0 -7
- data/lib/riffer/params/boolean.rb +2 -4
- data/lib/riffer/params/param.rb +28 -39
- data/lib/riffer/params.rb +9 -21
- data/lib/riffer/providers/amazon_bedrock.rb +42 -28
- data/lib/riffer/providers/anthropic.rb +4 -9
- data/lib/riffer/providers/azure_open_ai.rb +3 -19
- data/lib/riffer/providers/base.rb +13 -26
- data/lib/riffer/providers/gemini.rb +4 -4
- data/lib/riffer/providers/mock.rb +6 -26
- data/lib/riffer/providers/open_ai.rb +6 -8
- data/lib/riffer/providers/open_router.rb +4 -10
- data/lib/riffer/providers/repository.rb +4 -3
- data/lib/riffer/providers/token_usage.rb +9 -20
- data/lib/riffer/providers.rb +0 -8
- data/lib/riffer/runner/fibers.rb +10 -16
- data/lib/riffer/runner/sequential.rb +1 -4
- data/lib/riffer/runner/threaded.rb +3 -14
- data/lib/riffer/runner.rb +2 -15
- data/lib/riffer/skills/activate_tool.rb +2 -11
- data/lib/riffer/skills/adapter.rb +4 -22
- data/lib/riffer/skills/backend.rb +7 -21
- data/lib/riffer/skills/config.rb +10 -31
- data/lib/riffer/skills/context.rb +5 -20
- data/lib/riffer/skills/filesystem_backend.rb +7 -25
- data/lib/riffer/skills/frontmatter.rb +10 -28
- data/lib/riffer/skills/markdown_adapter.rb +2 -9
- data/lib/riffer/skills/xml_adapter.rb +2 -8
- data/lib/riffer/stream_events/base.rb +1 -6
- data/lib/riffer/stream_events/guardrail_modification.rb +1 -8
- data/lib/riffer/stream_events/guardrail_tripwire.rb +1 -8
- data/lib/riffer/stream_events/interrupt.rb +4 -7
- data/lib/riffer/stream_events/reasoning_delta.rb +2 -4
- data/lib/riffer/stream_events/reasoning_done.rb +2 -4
- data/lib/riffer/stream_events/skill_activation.rb +2 -4
- data/lib/riffer/stream_events/text_delta.rb +0 -2
- data/lib/riffer/stream_events/text_done.rb +1 -3
- data/lib/riffer/stream_events/token_usage_done.rb +1 -8
- data/lib/riffer/stream_events/tool_call_delta.rb +2 -3
- data/lib/riffer/stream_events/tool_call_done.rb +1 -3
- data/lib/riffer/stream_events/web_search_done.rb +1 -3
- data/lib/riffer/stream_events/web_search_status.rb +2 -3
- data/lib/riffer/stream_events.rb +0 -10
- data/lib/riffer/tool.rb +6 -13
- data/lib/riffer/tools/response.rb +8 -4
- data/lib/riffer/tools/runtime/fibers.rb +0 -3
- data/lib/riffer/tools/runtime/inline.rb +1 -4
- data/lib/riffer/tools/runtime/threaded.rb +0 -2
- data/lib/riffer/tools/runtime.rb +5 -38
- data/lib/riffer/tools/toolable.rb +5 -16
- data/lib/riffer/tools.rb +0 -4
- data/lib/riffer/version.rb +1 -1
- data/lib/riffer.rb +7 -8
- data/sig/generated/riffer/agent/config.rbs +29 -46
- data/sig/generated/riffer/agent/context.rbs +40 -48
- data/sig/generated/riffer/agent/response.rbs +4 -20
- data/sig/generated/riffer/agent/run.rbs +12 -61
- data/sig/generated/riffer/agent/serializer.rbs +28 -81
- data/sig/generated/riffer/agent/session/repair.rbs +12 -40
- data/sig/generated/riffer/agent/session.rbs +25 -67
- data/sig/generated/riffer/agent/structured_output/result.rbs +2 -10
- data/sig/generated/riffer/agent/structured_output.rbs +5 -12
- data/sig/generated/riffer/agent.rbs +62 -191
- data/sig/generated/riffer/config.rbs +34 -100
- data/sig/generated/riffer/evals/evaluator.rbs +7 -27
- data/sig/generated/riffer/evals/evaluator_runner.rbs +9 -19
- data/sig/generated/riffer/evals/judge.rbs +4 -24
- data/sig/generated/riffer/evals/result.rbs +1 -17
- data/sig/generated/riffer/evals/run_result.rbs +0 -10
- data/sig/generated/riffer/evals/scenario_result.rbs +0 -13
- data/sig/generated/riffer/evals.rbs +0 -6
- data/sig/generated/riffer/guardrail.rbs +4 -27
- data/sig/generated/riffer/guardrails/modification.rbs +0 -10
- data/sig/generated/riffer/guardrails/result.rbs +3 -30
- data/sig/generated/riffer/guardrails/runner.rbs +5 -22
- data/sig/generated/riffer/guardrails/tripwire.rbs +1 -19
- data/sig/generated/riffer/guardrails.rbs +2 -4
- data/sig/generated/riffer/helpers/call_or_value.rbs +4 -3
- data/sig/generated/riffer/helpers/class_name_converter.rbs +1 -1
- data/sig/generated/riffer/helpers/dependencies.rbs +3 -7
- data/sig/generated/riffer/helpers.rbs +0 -5
- data/sig/generated/riffer/mcp/authenticated_tool.rbs +5 -4
- data/sig/generated/riffer/mcp/client.rbs +10 -16
- data/sig/generated/riffer/mcp/manifest.rbs +9 -9
- data/sig/generated/riffer/mcp/registration.rbs +2 -10
- data/sig/generated/riffer/mcp/registry.rbs +11 -18
- data/sig/generated/riffer/mcp/search_tool.rbs +26 -0
- data/sig/generated/riffer/mcp/tool_factory.rbs +10 -15
- data/sig/generated/riffer/mcp.rbs +10 -17
- data/sig/generated/riffer/messages/assistant.rbs +2 -8
- data/sig/generated/riffer/messages/base.rbs +11 -16
- data/sig/generated/riffer/messages/file_part.rbs +13 -23
- data/sig/generated/riffer/messages/system.rbs +0 -4
- data/sig/generated/riffer/messages/tool.rbs +0 -9
- data/sig/generated/riffer/messages/user.rbs +0 -9
- data/sig/generated/riffer/messages.rbs +0 -7
- data/sig/generated/riffer/params/boolean.rbs +2 -4
- data/sig/generated/riffer/params/param.rbs +21 -39
- data/sig/generated/riffer/params.rbs +9 -21
- data/sig/generated/riffer/providers/amazon_bedrock.rbs +21 -25
- data/sig/generated/riffer/providers/anthropic.rbs +2 -7
- data/sig/generated/riffer/providers/azure_open_ai.rbs +3 -18
- data/sig/generated/riffer/providers/base.rbs +9 -25
- data/sig/generated/riffer/providers/gemini.rbs +0 -2
- data/sig/generated/riffer/providers/mock.rbs +6 -26
- data/sig/generated/riffer/providers/open_ai.rbs +1 -5
- data/sig/generated/riffer/providers/open_router.rbs +4 -10
- data/sig/generated/riffer/providers/repository.rbs +2 -3
- data/sig/generated/riffer/providers/token_usage.rbs +6 -16
- data/sig/generated/riffer/providers.rbs +0 -8
- data/sig/generated/riffer/runner/fibers.rbs +8 -15
- data/sig/generated/riffer/runner/sequential.rbs +1 -3
- data/sig/generated/riffer/runner/threaded.rbs +3 -13
- data/sig/generated/riffer/runner.rbs +2 -14
- data/sig/generated/riffer/skills/activate_tool.rbs +2 -11
- data/sig/generated/riffer/skills/adapter.rbs +4 -22
- data/sig/generated/riffer/skills/backend.rbs +7 -21
- data/sig/generated/riffer/skills/config.rbs +10 -31
- data/sig/generated/riffer/skills/context.rbs +5 -20
- data/sig/generated/riffer/skills/filesystem_backend.rbs +7 -24
- data/sig/generated/riffer/skills/frontmatter.rbs +10 -27
- data/sig/generated/riffer/skills/markdown_adapter.rbs +2 -9
- data/sig/generated/riffer/skills/xml_adapter.rbs +2 -8
- data/sig/generated/riffer/stream_events/base.rbs +1 -6
- data/sig/generated/riffer/stream_events/guardrail_modification.rbs +1 -8
- data/sig/generated/riffer/stream_events/guardrail_tripwire.rbs +1 -8
- data/sig/generated/riffer/stream_events/interrupt.rbs +4 -7
- data/sig/generated/riffer/stream_events/reasoning_delta.rbs +2 -4
- data/sig/generated/riffer/stream_events/reasoning_done.rbs +2 -4
- data/sig/generated/riffer/stream_events/skill_activation.rbs +2 -4
- data/sig/generated/riffer/stream_events/text_delta.rbs +0 -2
- data/sig/generated/riffer/stream_events/text_done.rbs +1 -3
- data/sig/generated/riffer/stream_events/token_usage_done.rbs +1 -7
- data/sig/generated/riffer/stream_events/tool_call_delta.rbs +2 -3
- data/sig/generated/riffer/stream_events/tool_call_done.rbs +1 -3
- data/sig/generated/riffer/stream_events/web_search_done.rbs +1 -3
- data/sig/generated/riffer/stream_events/web_search_status.rbs +2 -3
- data/sig/generated/riffer/stream_events.rbs +0 -10
- data/sig/generated/riffer/tool.rbs +5 -12
- data/sig/generated/riffer/tools/response.rbs +6 -4
- data/sig/generated/riffer/tools/runtime/fibers.rbs +0 -3
- data/sig/generated/riffer/tools/runtime/inline.rbs +1 -3
- data/sig/generated/riffer/tools/runtime/threaded.rbs +0 -2
- data/sig/generated/riffer/tools/runtime.rbs +5 -37
- data/sig/generated/riffer/tools/toolable.rbs +4 -14
- data/sig/generated/riffer/tools.rbs +0 -4
- data/sig/generated/riffer.rbs +5 -4
- data/sig/manual/riffer/agent/session/repair.rbs +5 -0
- data/sig/manual/riffer/evals/evaluator_runner.rbs +5 -0
- data/sig/manual/riffer/helpers/class_name_converter.rbs +5 -0
- data/sig/manual/riffer/helpers/dependencies.rbs +5 -0
- data/sig/manual/riffer/mcp/authenticated_tool.rbs +5 -0
- data/sig/manual/riffer/mcp/registry.rbs +5 -0
- data/sig/manual/riffer/mcp/tool_factory.rbs +5 -0
- data/sig/manual/riffer/mcp.rbs +5 -0
- data/sig/manual/riffer/providers/repository.rbs +5 -0
- data/sig/manual/riffer.rbs +5 -0
- metadata +17 -9
- data/.agents/rdoc.md +0 -69
- data/lib/riffer/messages/converter.rb +0 -90
- data/sig/generated/riffer/messages/converter.rbs +0 -33
- data/sig/manual/riffer/tools/toolable.rbs +0 -6
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
# Generated from lib/riffer/skills/frontmatter.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Immutable value object holding parsed SKILL.md YAML frontmatter.
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# All unrecognized top-level frontmatter keys are merged into +metadata+.
|
|
7
|
-
#
|
|
8
|
-
# frontmatter, body = Riffer::Skills::Frontmatter.parse(raw_content)
|
|
3
|
+
# Immutable value object holding parsed SKILL.md YAML frontmatter. Required
|
|
4
|
+
# fields: +name+ and +description+; unrecognized top-level keys are merged into
|
|
5
|
+
# +metadata+.
|
|
9
6
|
class Riffer::Skills::Frontmatter
|
|
10
7
|
NAME_PATTERN: Regexp
|
|
11
8
|
|
|
@@ -19,26 +16,19 @@ class Riffer::Skills::Frontmatter
|
|
|
19
16
|
# The skill description (1-1024 chars).
|
|
20
17
|
attr_reader description: String
|
|
21
18
|
|
|
22
|
-
#
|
|
23
|
-
#
|
|
19
|
+
# Metadata from the spec's +metadata+ field plus any unrecognized top-level
|
|
20
|
+
# keys.
|
|
24
21
|
attr_reader metadata: Hash[Symbol, untyped]
|
|
25
22
|
|
|
26
|
-
# Parses a raw SKILL.md string into a Frontmatter
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
# top-level keys become +metadata+. Available to custom backends
|
|
30
|
-
# so they don't need to reimplement parsing.
|
|
31
|
-
#
|
|
32
|
-
# Raises Riffer::ArgumentError if frontmatter is invalid.
|
|
33
|
-
#
|
|
23
|
+
# Parses a raw SKILL.md string into a +[Frontmatter, body]+ pair — public so
|
|
24
|
+
# custom backends needn't reimplement parsing. Raises Riffer::ArgumentError
|
|
25
|
+
# if the frontmatter is invalid.
|
|
34
26
|
# --
|
|
35
27
|
# : (String) -> [Riffer::Skills::Frontmatter, String]
|
|
36
28
|
def self.parse: (String) -> [ Riffer::Skills::Frontmatter, String ]
|
|
37
29
|
|
|
38
30
|
# Parses only the frontmatter from a raw SKILL.md string, ignoring the body.
|
|
39
|
-
#
|
|
40
|
-
# Raises Riffer::ArgumentError if frontmatter is invalid.
|
|
41
|
-
#
|
|
31
|
+
# Raises Riffer::ArgumentError if the frontmatter is invalid.
|
|
42
32
|
# --
|
|
43
33
|
# : (String) -> Riffer::Skills::Frontmatter
|
|
44
34
|
def self.parse_frontmatter: (String) -> Riffer::Skills::Frontmatter
|
|
@@ -47,14 +37,7 @@ class Riffer::Skills::Frontmatter
|
|
|
47
37
|
# : (String) -> [Hash[Symbol, untyped], String]
|
|
48
38
|
def self.split_frontmatter: (String) -> [ Hash[Symbol, untyped], String ]
|
|
49
39
|
|
|
50
|
-
#
|
|
51
|
-
#
|
|
52
|
-
# [name] the skill name (must match +[a-z0-9]([a-z0-9-]*[a-z0-9])?+, 1-64 chars).
|
|
53
|
-
# [description] the skill description (1-1024 chars).
|
|
54
|
-
# [metadata] optional metadata hash.
|
|
55
|
-
#
|
|
56
|
-
# Raises Riffer::ArgumentError if name or description is invalid.
|
|
57
|
-
#
|
|
40
|
+
# Raises Riffer::ArgumentError if +name+ or +description+ is invalid.
|
|
58
41
|
# --
|
|
59
42
|
# : (name: String, description: String, ?metadata: Hash[Symbol, untyped]) -> void
|
|
60
43
|
def initialize: (name: String, description: String, ?metadata: Hash[Symbol, untyped]) -> void
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
# Generated from lib/riffer/skills/markdown_adapter.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Default
|
|
4
|
-
#
|
|
5
|
-
# Renders a skill catalog as Markdown for the system prompt.
|
|
6
|
-
# Used by OpenAI, Amazon Bedrock, and other providers.
|
|
7
|
-
#
|
|
8
|
-
# See Riffer::Skills::XmlAdapter for the Anthropic/Claude variant.
|
|
3
|
+
# Default skill adapter — renders a skill catalog as Markdown for the system
|
|
4
|
+
# prompt.
|
|
9
5
|
class Riffer::Skills::MarkdownAdapter < Riffer::Skills::Adapter
|
|
10
6
|
# Renders a skill catalog as Markdown.
|
|
11
|
-
#
|
|
12
|
-
# [skills] array of Frontmatter objects to render.
|
|
13
|
-
#
|
|
14
7
|
# --
|
|
15
8
|
# : (Array[Riffer::Skills::Frontmatter]) -> String
|
|
16
9
|
def render_catalog: (Array[Riffer::Skills::Frontmatter]) -> String
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
# Generated from lib/riffer/skills/xml_adapter.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Renders a skill catalog as XML for the system prompt.
|
|
6
|
-
#
|
|
7
|
-
# See Riffer::Skills::MarkdownAdapter for the default variant.
|
|
3
|
+
# Renders a skill catalog as XML for the system prompt, optimized for
|
|
4
|
+
# Anthropic/Claude.
|
|
8
5
|
class Riffer::Skills::XmlAdapter < Riffer::Skills::Adapter
|
|
9
6
|
# Renders a skill catalog as XML.
|
|
10
|
-
#
|
|
11
|
-
# [skills] array of Frontmatter objects to render.
|
|
12
|
-
#
|
|
13
7
|
# --
|
|
14
8
|
# : (Array[Riffer::Skills::Frontmatter]) -> String
|
|
15
9
|
def render_catalog: (Array[Riffer::Skills::Frontmatter]) -> String
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/base.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Base class for all streaming events
|
|
4
|
-
#
|
|
5
|
-
# Subclasses must implement the +to_h+ method.
|
|
3
|
+
# Base class for all streaming events. Subclasses must implement +to_h+.
|
|
6
4
|
class Riffer::StreamEvents::Base
|
|
7
5
|
# The message role (typically :assistant).
|
|
8
6
|
attr_reader role: Symbol
|
|
@@ -12,9 +10,6 @@ class Riffer::StreamEvents::Base
|
|
|
12
10
|
def initialize: (?role: Symbol) -> void
|
|
13
11
|
|
|
14
12
|
# Converts the event to a hash.
|
|
15
|
-
#
|
|
16
|
-
# Raises NotImplementedError if not implemented by subclass.
|
|
17
|
-
#
|
|
18
13
|
# --
|
|
19
14
|
# : () -> Hash[Symbol, untyped]
|
|
20
15
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/guardrail_modification.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Emitted when a guardrail transforms data during the streaming pipeline.
|
|
3
|
+
# Emitted when a guardrail transforms data during streaming.
|
|
6
4
|
class Riffer::StreamEvents::GuardrailModification < Riffer::StreamEvents::Base
|
|
7
5
|
# The modification record.
|
|
8
6
|
attr_reader modification: Riffer::Guardrails::Modification
|
|
9
7
|
|
|
10
|
-
# Creates a new guardrail modification stream event.
|
|
11
|
-
#
|
|
12
|
-
# [modification] the modification details.
|
|
13
|
-
# [role] the message role (defaults to :assistant).
|
|
14
|
-
#
|
|
15
8
|
# --
|
|
16
9
|
# : (Riffer::Guardrails::Modification, ?role: Symbol) -> void
|
|
17
10
|
def initialize: (Riffer::Guardrails::Modification, ?role: Symbol) -> void
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/guardrail_tripwire.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Emitted when a guardrail blocks execution during the streaming pipeline.
|
|
3
|
+
# Emitted when a guardrail blocks execution during streaming.
|
|
6
4
|
class Riffer::StreamEvents::GuardrailTripwire < Riffer::StreamEvents::Base
|
|
7
5
|
# The tripwire containing block details.
|
|
8
6
|
attr_reader tripwire: Riffer::Guardrails::Tripwire
|
|
9
7
|
|
|
10
|
-
# Creates a new tripwire stream event.
|
|
11
|
-
#
|
|
12
|
-
# [tripwire] the tripwire details.
|
|
13
|
-
# [role] the message role (defaults to :assistant).
|
|
14
|
-
#
|
|
15
8
|
# --
|
|
16
9
|
# : (Riffer::Guardrails::Tripwire, ?role: Symbol) -> void
|
|
17
10
|
def initialize: (Riffer::Guardrails::Tripwire, ?role: Symbol) -> void
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/interrupt.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents an interrupt
|
|
4
|
-
#
|
|
5
|
-
# Emitted when a callback interrupts the agent loop via +throw :riffer_interrupt+.
|
|
3
|
+
# Represents an interrupt during streaming, fired when a callback throws
|
|
4
|
+
# +:riffer_interrupt+.
|
|
6
5
|
class Riffer::StreamEvents::Interrupt < Riffer::StreamEvents::Base
|
|
7
6
|
# The reason provided with the interrupt, if any.
|
|
8
7
|
attr_reader reason: (String | Symbol)?
|
|
9
8
|
|
|
10
|
-
# Call ids of tool_use blocks
|
|
11
|
-
#
|
|
12
|
-
# +Riffer.config.experimental_history_healing+ is on.
|
|
9
|
+
# Call ids of tool_use blocks riffer filled with placeholder results when the
|
|
10
|
+
# interrupt fired (only when history healing is on).
|
|
13
11
|
attr_reader healed_tool_call_ids: Array[String]
|
|
14
12
|
|
|
15
13
|
# --
|
|
@@ -17,7 +15,6 @@ class Riffer::StreamEvents::Interrupt < Riffer::StreamEvents::Base
|
|
|
17
15
|
def initialize: (?reason: (String | Symbol)?, ?healed_tool_call_ids: Array[String]) -> void
|
|
18
16
|
|
|
19
17
|
# Converts the event to a hash.
|
|
20
|
-
#
|
|
21
18
|
# --
|
|
22
19
|
# : () -> Hash[Symbol, untyped]
|
|
23
20
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/reasoning_delta.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents an incremental reasoning chunk during streaming
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM produces reasoning/thinking content incrementally.
|
|
6
|
-
# Only available with providers that support reasoning (e.g., OpenAI with reasoning option).
|
|
3
|
+
# Represents an incremental reasoning chunk during streaming; only emitted by
|
|
4
|
+
# providers that support reasoning (e.g. OpenAI with the reasoning option).
|
|
7
5
|
class Riffer::StreamEvents::ReasoningDelta < Riffer::StreamEvents::Base
|
|
8
6
|
# The incremental reasoning content.
|
|
9
7
|
attr_reader content: String
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/reasoning_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM has finished producing reasoning/thinking content.
|
|
6
|
-
# Only available with providers that support reasoning (e.g., OpenAI with reasoning option).
|
|
3
|
+
# Represents completed reasoning during streaming; only emitted by providers
|
|
4
|
+
# that support reasoning (e.g. OpenAI with the reasoning option).
|
|
7
5
|
class Riffer::StreamEvents::ReasoningDone < Riffer::StreamEvents::Base
|
|
8
6
|
# The complete reasoning content.
|
|
9
7
|
attr_reader content: String
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/skill_activation.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Emitted when a skill is activated during streaming
|
|
4
|
-
#
|
|
5
|
-
# Fired by the +on_activate+ callback on Riffer::Skills::Context
|
|
6
|
-
# when the LLM calls the skill activation tool.
|
|
3
|
+
# Emitted when a skill is activated during streaming, via the +on_activate+
|
|
4
|
+
# callback when the LLM calls the activation tool.
|
|
7
5
|
class Riffer::StreamEvents::SkillActivation < Riffer::StreamEvents::Base
|
|
8
6
|
# The activated skill name.
|
|
9
7
|
attr_reader name: String
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/text_delta.rb with RBS::Inline
|
|
2
2
|
|
|
3
3
|
# Represents an incremental text chunk during streaming.
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM produces text content incrementally.
|
|
6
4
|
class Riffer::StreamEvents::TextDelta < Riffer::StreamEvents::Base
|
|
7
5
|
# The incremental text content.
|
|
8
6
|
attr_reader content: String
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/text_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM has finished producing text content.
|
|
3
|
+
# Represents completed text generation during streaming.
|
|
6
4
|
class Riffer::StreamEvents::TextDone < Riffer::StreamEvents::Base
|
|
7
5
|
# The complete text content.
|
|
8
6
|
attr_reader content: String
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/token_usage_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM has finished and token usage data is available.
|
|
6
|
-
#
|
|
7
|
-
# event.token_usage.input_tokens # => 100
|
|
8
|
-
# event.token_usage.output_tokens # => 50
|
|
9
|
-
# event.token_usage.total_tokens # => 150
|
|
3
|
+
# Final token usage for the response, emitted when the LLM finishes.
|
|
10
4
|
class Riffer::StreamEvents::TokenUsageDone < Riffer::StreamEvents::Base
|
|
11
5
|
# The token usage data for this response.
|
|
12
6
|
attr_reader token_usage: Riffer::Providers::TokenUsage
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/tool_call_delta.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM is building a tool call, containing partial argument data.
|
|
3
|
+
# Represents an incremental tool call chunk (partial argument data) during
|
|
4
|
+
# streaming.
|
|
6
5
|
class Riffer::StreamEvents::ToolCallDelta < Riffer::StreamEvents::Base
|
|
7
6
|
# The tool call item identifier.
|
|
8
7
|
attr_reader item_id: String
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/tool_call_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM has finished building a tool call with complete arguments.
|
|
3
|
+
# Represents a completed tool call during streaming.
|
|
6
4
|
class Riffer::StreamEvents::ToolCallDone < Riffer::StreamEvents::Base
|
|
7
5
|
# The tool call item identifier.
|
|
8
6
|
attr_reader item_id: String
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/web_search_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM has finished a server-side web search.
|
|
3
|
+
# The result of a completed server-side web search during streaming.
|
|
6
4
|
class Riffer::StreamEvents::WebSearchDone < Riffer::StreamEvents::Base
|
|
7
5
|
# The search query used.
|
|
8
6
|
attr_reader query: String
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/web_search_status.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Emitted when the LLM performs a server-side web search and its status changes.
|
|
3
|
+
# A web search status notification, emitted as a server-side web search
|
|
4
|
+
# progresses.
|
|
6
5
|
class Riffer::StreamEvents::WebSearchStatus < Riffer::StreamEvents::Base
|
|
7
6
|
# The web search status ("in_progress", "searching", "completed", "open_page").
|
|
8
7
|
attr_reader status: String
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Namespace for streaming event types in the Riffer framework.
|
|
4
|
-
#
|
|
5
|
-
# When streaming responses, these events are yielded to represent incremental updates:
|
|
6
|
-
# - Riffer::StreamEvents::TextDelta - Incremental text content
|
|
7
|
-
# - Riffer::StreamEvents::TextDone - Complete text content
|
|
8
|
-
# - Riffer::StreamEvents::ToolCallDelta - Incremental tool call arguments
|
|
9
|
-
# - Riffer::StreamEvents::ToolCallDone - Complete tool call
|
|
10
|
-
# - Riffer::StreamEvents::ReasoningDelta - Incremental reasoning content
|
|
11
|
-
# - Riffer::StreamEvents::ReasoningDone - Complete reasoning content
|
|
12
|
-
# - Riffer::StreamEvents::SkillActivation - Skill activated during streaming
|
|
13
3
|
module Riffer::StreamEvents
|
|
14
4
|
end
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
# Generated from lib/riffer/tool.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# Provides a DSL for defining tool description and parameters.
|
|
6
|
-
# Subclasses must implement the +call+ method.
|
|
7
|
-
#
|
|
8
|
-
# See Riffer::Agent.
|
|
3
|
+
# Base class for all tools in the Riffer framework. Subclasses must implement
|
|
4
|
+
# the +call+ method.
|
|
9
5
|
#
|
|
10
6
|
# class WeatherLookupTool < Riffer::Tool
|
|
11
7
|
# description "Provides current weather information for a specified city."
|
|
@@ -23,26 +19,23 @@ class Riffer::Tool
|
|
|
23
19
|
extend Riffer::Tools::Toolable
|
|
24
20
|
|
|
25
21
|
# Executes the tool with the given arguments.
|
|
26
|
-
#
|
|
27
|
-
# Raises NotImplementedError if not implemented by subclass.
|
|
28
|
-
#
|
|
29
22
|
# --
|
|
30
23
|
# : (context: Riffer::Agent::Context?, **untyped) -> Riffer::Tools::Response
|
|
31
24
|
def call: (context: Riffer::Agent::Context?, **untyped) -> Riffer::Tools::Response
|
|
32
25
|
|
|
33
|
-
# Creates a text response.
|
|
26
|
+
# Creates a text response.
|
|
34
27
|
#
|
|
35
28
|
# --
|
|
36
29
|
# : (untyped) -> Riffer::Tools::Response
|
|
37
30
|
def text: (untyped) -> Riffer::Tools::Response
|
|
38
31
|
|
|
39
|
-
# Creates a JSON response.
|
|
32
|
+
# Creates a JSON response.
|
|
40
33
|
#
|
|
41
34
|
# --
|
|
42
35
|
# : (untyped) -> Riffer::Tools::Response
|
|
43
36
|
def json: (untyped) -> Riffer::Tools::Response
|
|
44
37
|
|
|
45
|
-
# Creates an error response.
|
|
38
|
+
# Creates an error response.
|
|
46
39
|
#
|
|
47
40
|
# --
|
|
48
41
|
# : (String, ?type: Symbol) -> Riffer::Tools::Response
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/response.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# All tools must return a Response object from their +call+ method.
|
|
6
|
-
# Use +Response.success+ for successful results and +Response.error+ for failures.
|
|
3
|
+
# Represents the result of a tool execution; every tool's +call+ must return one.
|
|
7
4
|
#
|
|
8
5
|
# class MyTool < Riffer::Tool
|
|
9
6
|
# def call(context:, **kwargs)
|
|
@@ -18,10 +15,13 @@ class Riffer::Tools::Response
|
|
|
18
15
|
|
|
19
16
|
VALID_FORMATS: Array[Symbol]
|
|
20
17
|
|
|
18
|
+
# The response content.
|
|
21
19
|
attr_reader content: String
|
|
22
20
|
|
|
21
|
+
# The error message, or +nil+ on success.
|
|
23
22
|
attr_reader error_message: String?
|
|
24
23
|
|
|
24
|
+
# The error type, or +nil+ on success.
|
|
25
25
|
attr_reader error_type: Symbol?
|
|
26
26
|
|
|
27
27
|
# Creates a success response.
|
|
@@ -50,10 +50,12 @@ class Riffer::Tools::Response
|
|
|
50
50
|
# : (String, ?type: Symbol) -> Riffer::Tools::Response
|
|
51
51
|
def self.error: (String, ?type: Symbol) -> Riffer::Tools::Response
|
|
52
52
|
|
|
53
|
+
# Returns true if the tool execution succeeded.
|
|
53
54
|
# --
|
|
54
55
|
# : () -> bool
|
|
55
56
|
def success?: () -> bool
|
|
56
57
|
|
|
58
|
+
# Returns true if the tool execution failed.
|
|
57
59
|
# --
|
|
58
60
|
# : () -> bool
|
|
59
61
|
def error?: () -> bool
|
|
@@ -6,9 +6,6 @@
|
|
|
6
6
|
# tool_runtime Riffer::Tools::Runtime::Fibers
|
|
7
7
|
# end
|
|
8
8
|
class Riffer::Tools::Runtime::Fibers < Riffer::Tools::Runtime
|
|
9
|
-
# [max_concurrency] maximum number of tool calls to execute simultaneously.
|
|
10
|
-
# When +nil+, all tool calls run as fibers without limit.
|
|
11
|
-
#
|
|
12
9
|
# --
|
|
13
10
|
# : (?max_concurrency: Integer?) -> void
|
|
14
11
|
def initialize: (?max_concurrency: Integer?) -> void
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/runtime/inline.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Executes tool calls sequentially in the current thread.
|
|
4
|
-
#
|
|
5
|
-
# This is the default tool runtime used when no runtime is configured.
|
|
3
|
+
# Executes tool calls sequentially in the current thread — the default runtime.
|
|
6
4
|
class Riffer::Tools::Runtime::Inline < Riffer::Tools::Runtime
|
|
7
5
|
# --
|
|
8
6
|
# : () -> void
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
class Riffer::Tools::Runtime::Threaded < Riffer::Tools::Runtime
|
|
9
9
|
DEFAULT_MAX_CONCURRENCY: Integer
|
|
10
10
|
|
|
11
|
-
# [max_concurrency] maximum number of tool calls to execute simultaneously.
|
|
12
|
-
#
|
|
13
11
|
# --
|
|
14
12
|
# : (?max_concurrency: Integer) -> void
|
|
15
13
|
def initialize: (?max_concurrency: Integer) -> void
|
|
@@ -1,45 +1,22 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/runtime.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# +execute+ as the sole public entry point.
|
|
7
|
-
#
|
|
8
|
-
# Subclass and override +dispatch_tool_call+ to customize how individual
|
|
9
|
-
# tool calls are dispatched (e.g., HTTP, gRPC).
|
|
10
|
-
#
|
|
11
|
-
# runtime = Riffer::Tools::Runtime::Inline.new
|
|
12
|
-
# results = runtime.execute(tool_calls, tools: tools, context: context)
|
|
3
|
+
# Handles tool call execution for an agent, composing with a Riffer::Runner for
|
|
4
|
+
# concurrency. Subclass and override +dispatch_tool_call+ to customize dispatch
|
|
5
|
+
# (e.g. HTTP, gRPC).
|
|
13
6
|
class Riffer::Tools::Runtime
|
|
14
7
|
@runner: Riffer::Runner
|
|
15
8
|
|
|
16
|
-
# [runner] the concurrency runner to use for batch execution.
|
|
17
|
-
#
|
|
18
|
-
# Subclasses must provide a runner; instantiating Riffer::Tools::Runtime directly
|
|
19
|
-
# raises +NotImplementedError+.
|
|
20
|
-
#
|
|
21
9
|
# --
|
|
22
10
|
# : (runner: Riffer::Runner) -> void
|
|
23
11
|
def initialize: (runner: Riffer::Runner) -> void
|
|
24
12
|
|
|
25
13
|
# Executes a batch of tool calls, returning <tt>[tool_call, response]</tt> pairs.
|
|
26
|
-
#
|
|
27
|
-
# [tool_calls] the tool calls to execute.
|
|
28
|
-
# [tools] the resolved tool classes.
|
|
29
|
-
# [context] the context hash.
|
|
30
|
-
# [assistant_message] the assistant message that produced these tool
|
|
31
|
-
# calls, when known. Forwarded to +around_tool_call+ and
|
|
32
|
-
# +dispatch_tool_call+ so subclasses can access it (e.g. for
|
|
33
|
-
# instrumentation that needs the accompanying assistant text).
|
|
34
|
-
#
|
|
35
14
|
# --
|
|
36
15
|
# : (Array[Riffer::Messages::Assistant::ToolCall], tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Array[[Riffer::Messages::Assistant::ToolCall, Riffer::Tools::Response]]
|
|
37
16
|
def execute: (Array[Riffer::Messages::Assistant::ToolCall], tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Array[[ Riffer::Messages::Assistant::ToolCall, Riffer::Tools::Response ]]
|
|
38
17
|
|
|
39
|
-
# Hook
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
# The default implementation simply yields.
|
|
18
|
+
# Hook wrapping each tool call; override in subclasses to instrument or
|
|
19
|
+
# customize. Must +yield+ to continue.
|
|
43
20
|
#
|
|
44
21
|
# class InstrumentedRuntime < Riffer::Tools::Runtime::Inline
|
|
45
22
|
# private
|
|
@@ -58,15 +35,6 @@ class Riffer::Tools::Runtime
|
|
|
58
35
|
|
|
59
36
|
private
|
|
60
37
|
|
|
61
|
-
# Dispatches a single tool call. Override in subclasses to change
|
|
62
|
-
# how individual tools are invoked (e.g., HTTP, gRPC).
|
|
63
|
-
#
|
|
64
|
-
# [tool_call] the tool call to execute.
|
|
65
|
-
# [tools] the resolved tool classes.
|
|
66
|
-
# [context] the context hash.
|
|
67
|
-
# [assistant_message] the assistant message that produced this tool
|
|
68
|
-
# call, when known.
|
|
69
|
-
#
|
|
70
38
|
# --
|
|
71
39
|
# : (Riffer::Messages::Assistant::ToolCall, tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Riffer::Tools::Response
|
|
72
40
|
def dispatch_tool_call: (Riffer::Messages::Assistant::ToolCall, tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Riffer::Tools::Response
|
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/toolable.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# Extend this module to make a class discoverable as a tool by LLM providers.
|
|
8
|
-
# Provides identifier, description, params, timeout, and JSON schema
|
|
9
|
-
# generation.
|
|
10
|
-
#
|
|
11
|
-
# Instance-level execution concerns (+call+, +call_with_validation+, etc.)
|
|
12
|
-
# are NOT part of Toolable — those belong on Riffer::Tool.
|
|
3
|
+
# Shared class-level DSL for anything that presents as a tool to an LLM. Extend
|
|
4
|
+
# it to make a class discoverable as a tool; instance-level execution (+call+,
|
|
5
|
+
# +call_with_validation+) lives on Riffer::Tool instead.
|
|
13
6
|
#
|
|
14
7
|
# class MyTool
|
|
15
8
|
# extend Riffer::Tools::Toolable
|
|
@@ -83,10 +76,7 @@ module Riffer::Tools::Toolable
|
|
|
83
76
|
# : (?strict: bool) -> Hash[Symbol, untyped]
|
|
84
77
|
def parameters_schema: (?strict: bool) -> Hash[Symbol, untyped]
|
|
85
78
|
|
|
86
|
-
# Returns the kind of toolable entity
|
|
87
|
-
#
|
|
88
|
-
# Defaults to +:tool+. Extensible to +:agent+, +:workflow+, etc.
|
|
89
|
-
#
|
|
79
|
+
# Returns the kind of toolable entity; defaults to +:tool+.
|
|
90
80
|
# --
|
|
91
81
|
# : (?Symbol?) -> Symbol
|
|
92
82
|
def kind: (?Symbol?) -> Symbol
|
data/sig/generated/riffer.rbs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Generated from lib/riffer.rb with RBS::Inline
|
|
2
2
|
|
|
3
3
|
module Riffer
|
|
4
|
-
|
|
4
|
+
@config: Riffer::Config?
|
|
5
5
|
|
|
6
6
|
# Base error class for Riffer.
|
|
7
7
|
class Error < StandardError
|
|
@@ -27,7 +27,7 @@ module Riffer
|
|
|
27
27
|
#
|
|
28
28
|
# --
|
|
29
29
|
# : () -> Riffer::Config
|
|
30
|
-
def
|
|
30
|
+
def config: () -> Riffer::Config
|
|
31
31
|
|
|
32
32
|
# Yields the configuration for block-based setup.
|
|
33
33
|
#
|
|
@@ -37,9 +37,10 @@ module Riffer
|
|
|
37
37
|
#
|
|
38
38
|
# --
|
|
39
39
|
# : () ?{ (Riffer::Config) -> void } -> void
|
|
40
|
-
def
|
|
40
|
+
def configure: () ?{ (Riffer::Config) -> void } -> void
|
|
41
41
|
|
|
42
|
+
# Returns the gem version.
|
|
42
43
|
# --
|
|
43
44
|
# : () -> String
|
|
44
|
-
def
|
|
45
|
+
def version: () -> String
|
|
45
46
|
end
|