riffer 0.48.0 → 0.49.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/.claude/rules/comments.md +2 -4
- data/.claude/rules/rbs-inline.md +2 -12
- data/.release-please-manifest.json +1 -1
- data/.rubocop.yml +5 -0
- data/CHANGELOG.md +19 -0
- data/docs/AGENTS.md +3 -5
- data/docs/AGENT_LIFECYCLE.md +13 -16
- data/docs/CONFIGURATION.md +22 -33
- data/docs/TOOL_ADVANCED.md +1 -3
- data/docs/TRACING.md +1 -1
- data/docs/providers/AMAZON_BEDROCK.md +31 -0
- data/docs/providers/OPENROUTER.md +18 -1
- data/docs-site/build.rb +0 -6
- data/docs-site/check.rb +1 -5
- data/lib/riffer/agent/config.rb +4 -45
- data/lib/riffer/agent/context.rb +2 -26
- data/lib/riffer/agent/outcome.rb +0 -20
- data/lib/riffer/agent/response.rb +0 -38
- data/lib/riffer/agent/run.rb +11 -43
- data/lib/riffer/agent/serializer.rb +10 -39
- data/lib/riffer/agent/session/repair.rb +3 -15
- data/lib/riffer/agent/session.rb +25 -38
- data/lib/riffer/agent/structured_output/result.rb +0 -8
- data/lib/riffer/agent/structured_output.rb +0 -7
- data/lib/riffer/agent.rb +10 -130
- data/lib/riffer/config/amazon_bedrock.rb +30 -0
- data/lib/riffer/config/anthropic.rb +21 -0
- data/lib/riffer/config/azure_open_ai.rb +30 -0
- data/lib/riffer/config/evals.rb +18 -0
- data/lib/riffer/config/files.rb +61 -0
- data/lib/riffer/config/gemini.rb +21 -0
- data/lib/riffer/config/mcp.rb +31 -0
- data/lib/riffer/config/open_ai.rb +30 -0
- data/lib/riffer/config/open_router.rb +21 -0
- data/lib/riffer/config/pricing/rates.rb +36 -0
- data/lib/riffer/config/pricing.rb +64 -0
- data/lib/riffer/config/skills.rb +38 -0
- data/lib/riffer/config/tracing.rb +43 -0
- data/lib/riffer/config.rb +3 -362
- data/lib/riffer/evals/evaluator.rb +1 -29
- data/lib/riffer/evals/evaluator_runner.rb +0 -15
- data/lib/riffer/evals/judge.rb +0 -8
- data/lib/riffer/evals/result.rb +1 -11
- data/lib/riffer/evals/run_result.rb +0 -12
- data/lib/riffer/evals/scenario_result.rb +0 -19
- data/lib/riffer/files/downloader.rb +2 -3
- data/lib/riffer/files/resolver.rb +2 -7
- data/lib/riffer/guardrail.rb +2 -22
- data/lib/riffer/guardrails/modification.rb +0 -8
- data/lib/riffer/guardrails/result.rb +0 -17
- data/lib/riffer/guardrails/runner.rb +2 -11
- data/lib/riffer/guardrails/tripwire.rb +0 -8
- data/lib/riffer/guardrails.rb +0 -2
- data/lib/riffer/helpers/boolean.rb +0 -4
- data/lib/riffer/helpers/call_or_value.rb +0 -3
- data/lib/riffer/helpers/deep_dup.rb +3 -8
- data/lib/riffer/helpers/dependencies.rb +0 -4
- data/lib/riffer/helpers/identifier.rb +3 -12
- data/lib/riffer/helpers/validate.rb +42 -0
- data/lib/riffer/mcp/authenticated_tool.rb +4 -12
- data/lib/riffer/mcp/client.rb +0 -7
- data/lib/riffer/mcp/manifest.rb +3 -7
- data/lib/riffer/mcp/registration.rb +0 -10
- data/lib/riffer/mcp/registry.rb +0 -9
- data/lib/riffer/mcp/search_tool.rb +0 -4
- data/lib/riffer/mcp/tool.rb +1 -4
- data/lib/riffer/mcp/tool_factory.rb +3 -6
- data/lib/riffer/mcp.rb +2 -23
- data/lib/riffer/messages/assistant/reasoning_part.rb +4 -21
- data/lib/riffer/messages/assistant/tool_call.rb +1 -9
- data/lib/riffer/messages/assistant.rb +1 -21
- data/lib/riffer/messages/base.rb +0 -12
- data/lib/riffer/messages/system.rb +0 -3
- data/lib/riffer/messages/tool.rb +0 -15
- data/lib/riffer/messages/user/file_part.rb +2 -30
- data/lib/riffer/messages/user.rb +0 -4
- data/lib/riffer/params/boolean.rb +1 -5
- data/lib/riffer/params/param.rb +3 -31
- data/lib/riffer/params.rb +8 -41
- data/lib/riffer/providers/amazon_bedrock.rb +101 -42
- data/lib/riffer/providers/anthropic.rb +9 -24
- data/lib/riffer/providers/azure_open_ai.rb +3 -8
- data/lib/riffer/providers/base.rb +7 -28
- data/lib/riffer/providers/finish_reason.rb +0 -6
- data/lib/riffer/providers/gemini/client.rb +4 -17
- data/lib/riffer/providers/gemini.rb +4 -10
- data/lib/riffer/providers/mock.rb +1 -26
- data/lib/riffer/providers/open_ai.rb +7 -17
- data/lib/riffer/providers/open_router.rb +105 -30
- data/lib/riffer/providers/repository.rb +2 -14
- data/lib/riffer/providers/token_usage.rb +5 -14
- data/lib/riffer/registrable.rb +11 -45
- data/lib/riffer/runner/fibers.rb +1 -6
- data/lib/riffer/runner/sequential.rb +0 -1
- data/lib/riffer/runner/threaded.rb +0 -3
- data/lib/riffer/runner.rb +0 -3
- data/lib/riffer/skills/activate_tool.rb +0 -3
- data/lib/riffer/skills/adapter.rb +0 -8
- data/lib/riffer/skills/backend.rb +2 -7
- data/lib/riffer/skills/config.rb +4 -20
- data/lib/riffer/skills/context.rb +0 -29
- data/lib/riffer/skills/filesystem_backend.rb +0 -7
- data/lib/riffer/skills/frontmatter.rb +2 -16
- data/lib/riffer/skills/markdown_adapter.rb +3 -6
- data/lib/riffer/skills/xml_adapter.rb +0 -3
- data/lib/riffer/stream_events/base.rb +0 -3
- data/lib/riffer/stream_events/finish_reason_done.rb +1 -6
- data/lib/riffer/stream_events/guardrail_modification.rb +0 -10
- data/lib/riffer/stream_events/guardrail_tripwire.rb +0 -10
- data/lib/riffer/stream_events/interrupt.rb +2 -12
- data/lib/riffer/stream_events/reasoning_delta.rb +0 -3
- data/lib/riffer/stream_events/reasoning_done.rb +1 -5
- data/lib/riffer/stream_events/skill_activation.rb +0 -3
- data/lib/riffer/stream_events/text_delta.rb +0 -2
- data/lib/riffer/stream_events/text_done.rb +0 -2
- data/lib/riffer/stream_events/token_usage_done.rb +0 -2
- data/lib/riffer/stream_events/tool_call_delta.rb +1 -5
- data/lib/riffer/stream_events/tool_call_done.rb +0 -5
- data/lib/riffer/stream_events/web_search_done.rb +0 -3
- data/lib/riffer/stream_events/web_search_status.rb +1 -5
- data/lib/riffer/testing/minitest.rb +4 -5
- data/lib/riffer/testing.rb +5 -38
- data/lib/riffer/tool.rb +2 -28
- data/lib/riffer/tools/response.rb +3 -32
- data/lib/riffer/tools/runtime/fibers.rb +0 -6
- data/lib/riffer/tools/runtime/inline.rb +0 -1
- data/lib/riffer/tools/runtime/threaded.rb +0 -6
- data/lib/riffer/tools/runtime.rb +5 -26
- data/lib/riffer/tools/toolable.rb +0 -37
- data/lib/riffer/tracing/capture.rb +3 -5
- data/lib/riffer/tracing/no_op.rb +0 -7
- data/lib/riffer/tracing/otel.rb +7 -16
- data/lib/riffer/tracing/stream_recorder.rb +0 -7
- data/lib/riffer/tracing.rb +4 -27
- data/lib/riffer/version.rb +1 -1
- data/lib/riffer.rb +2 -30
- data/sig/generated/riffer/agent/config.rbs +12 -48
- data/sig/generated/riffer/agent/context.rbs +2 -26
- data/sig/generated/riffer/agent/outcome.rbs +0 -20
- data/sig/generated/riffer/agent/response.rbs +1 -29
- data/sig/generated/riffer/agent/run.rbs +1 -27
- data/sig/generated/riffer/agent/serializer.rbs +2 -27
- data/sig/generated/riffer/agent/session/repair.rbs +2 -10
- data/sig/generated/riffer/agent/session.rbs +10 -36
- data/sig/generated/riffer/agent/structured_output/result.rbs +0 -7
- data/sig/generated/riffer/agent/structured_output.rbs +0 -7
- data/sig/generated/riffer/agent.rbs +5 -121
- data/sig/generated/riffer/config/amazon_bedrock.rbs +21 -0
- data/sig/generated/riffer/config/anthropic.rbs +15 -0
- data/sig/generated/riffer/config/azure_open_ai.rbs +21 -0
- data/sig/generated/riffer/config/evals.rbs +13 -0
- data/sig/generated/riffer/config/files.rbs +43 -0
- data/sig/generated/riffer/config/gemini.rbs +15 -0
- data/sig/generated/riffer/config/mcp.rbs +19 -0
- data/sig/generated/riffer/config/open_ai.rbs +21 -0
- data/sig/generated/riffer/config/open_router.rbs +15 -0
- data/sig/generated/riffer/config/pricing/rates.rbs +19 -0
- data/sig/generated/riffer/config/pricing.rbs +31 -0
- data/sig/generated/riffer/config/skills.rbs +19 -0
- data/sig/generated/riffer/config/tracing.rbs +25 -0
- data/sig/generated/riffer/config.rbs +2 -307
- data/sig/generated/riffer/evals/evaluator.rbs +0 -28
- data/sig/generated/riffer/evals/evaluator_runner.rbs +0 -14
- data/sig/generated/riffer/evals/judge.rbs +0 -7
- data/sig/generated/riffer/evals/result.rbs +1 -11
- data/sig/generated/riffer/evals/run_result.rbs +0 -12
- data/sig/generated/riffer/evals/scenario_result.rbs +0 -14
- data/sig/generated/riffer/files/resolver.rbs +0 -7
- data/sig/generated/riffer/guardrail.rbs +2 -22
- data/sig/generated/riffer/guardrails/modification.rbs +0 -6
- data/sig/generated/riffer/guardrails/result.rbs +0 -15
- data/sig/generated/riffer/guardrails/runner.rbs +0 -11
- data/sig/generated/riffer/guardrails/tripwire.rbs +0 -8
- data/sig/generated/riffer/guardrails.rbs +0 -2
- data/sig/generated/riffer/helpers/boolean.rbs +0 -4
- data/sig/generated/riffer/helpers/call_or_value.rbs +0 -3
- data/sig/generated/riffer/helpers/deep_dup.rbs +0 -8
- data/sig/generated/riffer/helpers/dependencies.rbs +0 -4
- data/sig/generated/riffer/helpers/identifier.rbs +0 -12
- data/sig/generated/riffer/helpers/validate.rbs +21 -0
- data/sig/generated/riffer/mcp/authenticated_tool.rbs +0 -5
- data/sig/generated/riffer/mcp/client.rbs +0 -7
- data/sig/generated/riffer/mcp/manifest.rbs +3 -7
- data/sig/generated/riffer/mcp/registration.rbs +0 -10
- data/sig/generated/riffer/mcp/registry.rbs +0 -9
- data/sig/generated/riffer/mcp/search_tool.rbs +0 -4
- data/sig/generated/riffer/mcp/tool.rbs +0 -4
- data/sig/generated/riffer/mcp/tool_factory.rbs +0 -6
- data/sig/generated/riffer/mcp.rbs +2 -22
- data/sig/generated/riffer/messages/assistant/reasoning_part.rbs +4 -17
- data/sig/generated/riffer/messages/assistant/tool_call.rbs +1 -9
- data/sig/generated/riffer/messages/assistant.rbs +10 -30
- data/sig/generated/riffer/messages/base.rbs +0 -12
- data/sig/generated/riffer/messages/system.rbs +0 -3
- data/sig/generated/riffer/messages/tool.rbs +0 -12
- data/sig/generated/riffer/messages/user/file_part.rbs +0 -30
- data/sig/generated/riffer/messages/user.rbs +0 -4
- data/sig/generated/riffer/params/boolean.rbs +1 -4
- data/sig/generated/riffer/params/param.rbs +0 -31
- data/sig/generated/riffer/params.rbs +4 -40
- data/sig/generated/riffer/providers/amazon_bedrock.rbs +29 -25
- data/sig/generated/riffer/providers/anthropic.rbs +0 -10
- data/sig/generated/riffer/providers/azure_open_ai.rbs +0 -8
- data/sig/generated/riffer/providers/base.rbs +0 -28
- data/sig/generated/riffer/providers/finish_reason.rbs +0 -6
- data/sig/generated/riffer/providers/gemini/client.rbs +4 -17
- data/sig/generated/riffer/providers/gemini.rbs +0 -6
- data/sig/generated/riffer/providers/mock.rbs +0 -26
- data/sig/generated/riffer/providers/open_ai.rbs +2 -9
- data/sig/generated/riffer/providers/open_router.rbs +33 -14
- data/sig/generated/riffer/providers/repository.rbs +2 -14
- data/sig/generated/riffer/providers/token_usage.rbs +5 -14
- data/sig/generated/riffer/registrable.rbs +0 -45
- data/sig/generated/riffer/runner/fibers.rbs +0 -6
- data/sig/generated/riffer/runner/sequential.rbs +0 -1
- data/sig/generated/riffer/runner/threaded.rbs +0 -3
- data/sig/generated/riffer/runner.rbs +0 -3
- data/sig/generated/riffer/skills/activate_tool.rbs +0 -3
- data/sig/generated/riffer/skills/adapter.rbs +0 -8
- data/sig/generated/riffer/skills/backend.rbs +2 -7
- data/sig/generated/riffer/skills/config.rbs +0 -20
- data/sig/generated/riffer/skills/context.rbs +0 -29
- data/sig/generated/riffer/skills/filesystem_backend.rbs +0 -7
- data/sig/generated/riffer/skills/frontmatter.rbs +2 -16
- data/sig/generated/riffer/skills/markdown_adapter.rbs +0 -6
- data/sig/generated/riffer/skills/xml_adapter.rbs +0 -3
- data/sig/generated/riffer/stream_events/base.rbs +0 -3
- data/sig/generated/riffer/stream_events/finish_reason_done.rbs +1 -6
- data/sig/generated/riffer/stream_events/guardrail_modification.rbs +0 -10
- data/sig/generated/riffer/stream_events/guardrail_tripwire.rbs +0 -10
- data/sig/generated/riffer/stream_events/interrupt.rbs +2 -10
- data/sig/generated/riffer/stream_events/reasoning_delta.rbs +0 -3
- data/sig/generated/riffer/stream_events/reasoning_done.rbs +1 -5
- data/sig/generated/riffer/stream_events/skill_activation.rbs +0 -3
- data/sig/generated/riffer/stream_events/text_delta.rbs +0 -2
- data/sig/generated/riffer/stream_events/text_done.rbs +0 -2
- data/sig/generated/riffer/stream_events/token_usage_done.rbs +0 -2
- data/sig/generated/riffer/stream_events/tool_call_delta.rbs +1 -5
- data/sig/generated/riffer/stream_events/tool_call_done.rbs +0 -5
- data/sig/generated/riffer/stream_events/web_search_done.rbs +0 -3
- data/sig/generated/riffer/stream_events/web_search_status.rbs +1 -5
- data/sig/generated/riffer/testing.rbs +0 -38
- data/sig/generated/riffer/tool.rbs +0 -27
- data/sig/generated/riffer/tools/response.rbs +3 -29
- data/sig/generated/riffer/tools/runtime/fibers.rbs +0 -5
- data/sig/generated/riffer/tools/runtime/inline.rbs +0 -1
- data/sig/generated/riffer/tools/runtime/threaded.rbs +0 -5
- data/sig/generated/riffer/tools/runtime.rbs +2 -24
- data/sig/generated/riffer/tools/toolable.rbs +0 -37
- data/sig/generated/riffer/tracing/capture.rbs +2 -5
- data/sig/generated/riffer/tracing/no_op.rbs +0 -7
- data/sig/generated/riffer/tracing/otel.rbs +7 -16
- data/sig/generated/riffer/tracing/stream_recorder.rbs +0 -2
- data/sig/generated/riffer/tracing.rbs +4 -23
- data/sig/generated/riffer.rbs +2 -29
- data/sig/manual/riffer/helpers/validate.rbs +5 -0
- metadata +30 -1
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/skills/context.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Skills context for an agent generation cycle — coordinates discovery,
|
|
4
|
-
# activation, and prompt rendering, caching skill bodies to avoid redundant
|
|
5
|
-
# backend reads. Exposed to tools via <tt>context.skills</tt>.
|
|
6
3
|
class Riffer::Skills::Context
|
|
7
4
|
@preactivated: Array[String]
|
|
8
5
|
|
|
@@ -12,79 +9,53 @@ class Riffer::Skills::Context
|
|
|
12
9
|
|
|
13
10
|
@backend: Riffer::Skills::Backend
|
|
14
11
|
|
|
15
|
-
# Skill catalog indexed by name.
|
|
16
12
|
attr_reader skills: Hash[String, Riffer::Skills::Frontmatter]
|
|
17
13
|
|
|
18
|
-
# The skill adapter used for this context.
|
|
19
14
|
attr_reader adapter: Riffer::Skills::Adapter
|
|
20
15
|
|
|
21
|
-
# Optional callback invoked when a skill is first activated.
|
|
22
16
|
attr_accessor on_activate: (^(String) -> void)?
|
|
23
17
|
|
|
24
18
|
# --
|
|
25
19
|
# : (backend: Riffer::Skills::Backend, skills: Hash[String, Riffer::Skills::Frontmatter], adapter: Riffer::Skills::Adapter) -> void
|
|
26
20
|
def initialize: (backend: Riffer::Skills::Backend, skills: Hash[String, Riffer::Skills::Frontmatter], adapter: Riffer::Skills::Adapter) -> void
|
|
27
21
|
|
|
28
|
-
# Returns a skill's body without recording an activation.
|
|
29
|
-
#
|
|
30
22
|
# Raises Riffer::ArgumentError if the skill is not in the catalog.
|
|
31
|
-
#
|
|
32
23
|
# --
|
|
33
24
|
# : (String) -> String
|
|
34
25
|
def read: (String) -> String
|
|
35
26
|
|
|
36
|
-
# Activates a skill by name. Returns the cached body on re-activation.
|
|
37
|
-
#
|
|
38
27
|
# Raises Riffer::ArgumentError if the skill is not in the catalog.
|
|
39
|
-
#
|
|
40
28
|
# --
|
|
41
29
|
# : (String) -> String
|
|
42
30
|
def activate: (String) -> String
|
|
43
31
|
|
|
44
|
-
# Activates a skill and returns its body wrapped for injection as a user
|
|
45
|
-
# message.
|
|
46
|
-
#
|
|
47
32
|
# Raises Riffer::ArgumentError if the skill is not in the catalog.
|
|
48
|
-
#
|
|
49
33
|
# --
|
|
50
34
|
# : (String) -> String
|
|
51
35
|
def activation_prompt: (String) -> String
|
|
52
36
|
|
|
53
|
-
# Activates a skill whose body renders in the system prompt rather than the
|
|
54
|
-
# conversation.
|
|
55
|
-
#
|
|
56
37
|
# Raises Riffer::ArgumentError if the skill is not in the catalog.
|
|
57
|
-
#
|
|
58
38
|
# --
|
|
59
39
|
# : (String) -> void
|
|
60
40
|
def preactivate: (String) -> void
|
|
61
41
|
|
|
62
|
-
# Clears a skill's activation so the next activation is treated as the first.
|
|
63
|
-
#
|
|
64
42
|
# Raises Riffer::ArgumentError if the skill is not in the catalog.
|
|
65
|
-
#
|
|
66
43
|
# --
|
|
67
44
|
# : (String) -> void
|
|
68
45
|
def deactivate: (String) -> void
|
|
69
46
|
|
|
70
|
-
# Returns whether a skill has been activated.
|
|
71
|
-
#
|
|
72
47
|
# --
|
|
73
48
|
# : (String) -> bool
|
|
74
49
|
def activated?: (String) -> bool
|
|
75
50
|
|
|
76
|
-
# Returns whether a skill exists and may be activated by the model.
|
|
77
51
|
# --
|
|
78
52
|
# : (String) -> bool
|
|
79
53
|
def model_invocable?: (String) -> bool
|
|
80
54
|
|
|
81
|
-
# Returns whether any skill is available for the model to activate.
|
|
82
55
|
# --
|
|
83
56
|
# : () -> bool
|
|
84
57
|
def activatable?: () -> bool
|
|
85
58
|
|
|
86
|
-
# Returns the complete skills section for the system prompt — the catalog plus
|
|
87
|
-
# any pre-activated skill bodies.
|
|
88
59
|
# --
|
|
89
60
|
# : () -> String
|
|
90
61
|
def system_prompt: () -> String
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/skills/filesystem_backend.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Built-in backend that reads skills from the filesystem. Scans configured
|
|
4
|
-
# directories for immediate child directories containing +SKILL.md+; directory
|
|
5
|
-
# names must match the skill +name+.
|
|
6
3
|
class Riffer::Skills::FilesystemBackend < Riffer::Skills::Backend
|
|
7
4
|
@paths: Array[String]
|
|
8
5
|
|
|
@@ -12,14 +9,10 @@ class Riffer::Skills::FilesystemBackend < Riffer::Skills::Backend
|
|
|
12
9
|
# : (*String) -> void
|
|
13
10
|
def initialize: (*String) -> void
|
|
14
11
|
|
|
15
|
-
# Returns frontmatter for all discovered skills; on a name collision across
|
|
16
|
-
# paths, first-path-wins.
|
|
17
12
|
# --
|
|
18
13
|
# : () -> Array[Riffer::Skills::Frontmatter]
|
|
19
14
|
def list_skills: () -> Array[Riffer::Skills::Frontmatter]
|
|
20
15
|
|
|
21
|
-
# Returns the full SKILL.md body (without frontmatter) for a skill. Raises
|
|
22
|
-
# Riffer::ArgumentError if the skill is not found.
|
|
23
16
|
# --
|
|
24
17
|
# : (String) -> String
|
|
25
18
|
def read_skill: (String) -> String
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/skills/frontmatter.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Immutable value object holding parsed SKILL.md YAML frontmatter. Required
|
|
4
|
-
# fields: +name+ and +description+; the optional +disable-model-invocation+
|
|
5
|
-
# flag is recognized, and any other unrecognized top-level keys are merged into
|
|
6
|
-
# +metadata+.
|
|
7
3
|
class Riffer::Skills::Frontmatter
|
|
8
4
|
NAME_PATTERN: Regexp
|
|
9
5
|
|
|
@@ -11,29 +7,20 @@ class Riffer::Skills::Frontmatter
|
|
|
11
7
|
|
|
12
8
|
MAX_DESCRIPTION_LENGTH: Integer
|
|
13
9
|
|
|
14
|
-
# The skill name (1-64 chars, lowercase alphanumeric and hyphens).
|
|
15
10
|
attr_reader name: String
|
|
16
11
|
|
|
17
|
-
# The skill description (1-1024 chars).
|
|
18
12
|
attr_reader description: String
|
|
19
13
|
|
|
20
|
-
# Whether the skill opts out of model-driven activation. Hidden from the
|
|
21
|
-
# catalog and rejected at model activation; still reachable via programmatic
|
|
22
|
-
# activation.
|
|
23
14
|
attr_reader disable_model_invocation: bool
|
|
24
15
|
|
|
25
|
-
# Metadata from the spec's +metadata+ field plus any unrecognized top-level
|
|
26
|
-
# keys.
|
|
27
16
|
attr_reader metadata: Hash[Symbol, untyped]
|
|
28
17
|
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
# if the frontmatter is invalid.
|
|
18
|
+
# Public so custom backends needn't reimplement parsing. Raises
|
|
19
|
+
# Riffer::ArgumentError if the frontmatter is invalid.
|
|
32
20
|
# --
|
|
33
21
|
# : (String) -> [Riffer::Skills::Frontmatter, String]
|
|
34
22
|
def self.parse: (String) -> [ Riffer::Skills::Frontmatter, String ]
|
|
35
23
|
|
|
36
|
-
# Parses only the frontmatter from a raw SKILL.md string, ignoring the body.
|
|
37
24
|
# Raises Riffer::ArgumentError if the frontmatter is invalid.
|
|
38
25
|
# --
|
|
39
26
|
# : (String) -> Riffer::Skills::Frontmatter
|
|
@@ -44,7 +31,6 @@ class Riffer::Skills::Frontmatter
|
|
|
44
31
|
def self.split_frontmatter: (String) -> [ Hash[Symbol, untyped], String ]
|
|
45
32
|
|
|
46
33
|
# Raises Riffer::ArgumentError if +name+ or +description+ is invalid.
|
|
47
|
-
# +disable_model_invocation+ is treated as set only when literally +true+.
|
|
48
34
|
# --
|
|
49
35
|
# : (name: String, description: String, ?disable_model_invocation: bool, ?metadata: Hash[Symbol, untyped]) -> void
|
|
50
36
|
def initialize: (name: String, description: String, ?disable_model_invocation: bool, ?metadata: Hash[Symbol, untyped]) -> void
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
# Generated from lib/riffer/skills/markdown_adapter.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Default skill adapter — renders a skill catalog as Markdown for the system
|
|
4
|
-
# prompt.
|
|
5
3
|
class Riffer::Skills::MarkdownAdapter < Riffer::Skills::Adapter
|
|
6
|
-
# Renders a skill catalog as Markdown.
|
|
7
4
|
# --
|
|
8
5
|
# : (Array[Riffer::Skills::Frontmatter]) -> String
|
|
9
6
|
def render_catalog: (Array[Riffer::Skills::Frontmatter]) -> String
|
|
10
7
|
|
|
11
8
|
private
|
|
12
9
|
|
|
13
|
-
# Collapses whitespace so a multi-line (block scalar) description stays within
|
|
14
|
-
# its `-` list item instead of breaking out to column 0, where continuation
|
|
15
|
-
# lines would read as top-level prompt text or fabricated catalog entries.
|
|
16
10
|
# --
|
|
17
11
|
# : (String) -> String
|
|
18
12
|
def single_line: (String) -> String
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/skills/xml_adapter.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Renders a skill catalog as XML for the system prompt, optimized for
|
|
4
|
-
# Anthropic/Claude.
|
|
5
3
|
class Riffer::Skills::XmlAdapter < Riffer::Skills::Adapter
|
|
6
|
-
# Renders a skill catalog as XML.
|
|
7
4
|
# --
|
|
8
5
|
# : (Array[Riffer::Skills::Frontmatter]) -> String
|
|
9
6
|
def render_catalog: (Array[Riffer::Skills::Frontmatter]) -> String
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/base.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Base class for all streaming events. Subclasses must implement +to_h+.
|
|
4
3
|
class Riffer::StreamEvents::Base
|
|
5
|
-
# The message role (typically :assistant).
|
|
6
4
|
attr_reader role: Symbol
|
|
7
5
|
|
|
8
6
|
# --
|
|
9
7
|
# : (?role: Symbol) -> void
|
|
10
8
|
def initialize: (?role: Symbol) -> void
|
|
11
9
|
|
|
12
|
-
# Converts the event to a hash.
|
|
13
10
|
# --
|
|
14
11
|
# : () -> Hash[Symbol, untyped]
|
|
15
12
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/finish_reason_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
# stream; no ordering guarantee relative to TokenUsageDone.
|
|
3
|
+
# No ordering guarantee relative to TokenUsageDone.
|
|
5
4
|
class Riffer::StreamEvents::FinishReasonDone < Riffer::StreamEvents::Base
|
|
6
|
-
# The normalized finish reason (see <tt>Riffer::Providers::FinishReason::VALUES</tt>).
|
|
7
5
|
attr_reader finish_reason: Symbol
|
|
8
6
|
|
|
9
|
-
# The provider's raw finish-reason value, when one exists on the wire.
|
|
10
7
|
attr_reader raw_finish_reason: String?
|
|
11
8
|
|
|
12
|
-
# Raises Riffer::ArgumentError when +finish_reason+ is outside the
|
|
13
|
-
# normalized vocabulary.
|
|
14
9
|
# --
|
|
15
10
|
# : (finish_reason: Symbol, ?raw_finish_reason: String?, ?role: Symbol) -> void
|
|
16
11
|
def initialize: (finish_reason: Symbol, ?raw_finish_reason: String?, ?role: Symbol) -> void
|
|
@@ -1,34 +1,24 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/guardrail_modification.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Emitted when a guardrail transforms data during streaming.
|
|
4
3
|
class Riffer::StreamEvents::GuardrailModification < Riffer::StreamEvents::Base
|
|
5
|
-
# The modification record.
|
|
6
4
|
attr_reader modification: Riffer::Guardrails::Modification
|
|
7
5
|
|
|
8
6
|
# --
|
|
9
7
|
# : (Riffer::Guardrails::Modification, ?role: Symbol) -> void
|
|
10
8
|
def initialize: (Riffer::Guardrails::Modification, ?role: Symbol) -> void
|
|
11
9
|
|
|
12
|
-
# The guardrail class that made the transformation.
|
|
13
|
-
#
|
|
14
10
|
# --
|
|
15
11
|
# : () -> singleton(Riffer::Guardrail)
|
|
16
12
|
def guardrail: () -> singleton(Riffer::Guardrail)
|
|
17
13
|
|
|
18
|
-
# The phase when the transformation occurred.
|
|
19
|
-
#
|
|
20
14
|
# --
|
|
21
15
|
# : () -> Symbol
|
|
22
16
|
def phase: () -> Symbol
|
|
23
17
|
|
|
24
|
-
# The indices of messages that were changed.
|
|
25
|
-
#
|
|
26
18
|
# --
|
|
27
19
|
# : () -> Array[Integer]
|
|
28
20
|
def message_indices: () -> Array[Integer]
|
|
29
21
|
|
|
30
|
-
# Converts the event to a hash.
|
|
31
|
-
#
|
|
32
22
|
# --
|
|
33
23
|
# : () -> Hash[Symbol, untyped]
|
|
34
24
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,34 +1,24 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/guardrail_tripwire.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Emitted when a guardrail blocks execution during streaming.
|
|
4
3
|
class Riffer::StreamEvents::GuardrailTripwire < Riffer::StreamEvents::Base
|
|
5
|
-
# The tripwire containing block details.
|
|
6
4
|
attr_reader tripwire: Riffer::Guardrails::Tripwire
|
|
7
5
|
|
|
8
6
|
# --
|
|
9
7
|
# : (Riffer::Guardrails::Tripwire, ?role: Symbol) -> void
|
|
10
8
|
def initialize: (Riffer::Guardrails::Tripwire, ?role: Symbol) -> void
|
|
11
9
|
|
|
12
|
-
# The reason for blocking.
|
|
13
|
-
#
|
|
14
10
|
# --
|
|
15
11
|
# : () -> String
|
|
16
12
|
def reason: () -> String
|
|
17
13
|
|
|
18
|
-
# The phase when blocking occurred (:before or :after).
|
|
19
|
-
#
|
|
20
14
|
# --
|
|
21
15
|
# : () -> Symbol
|
|
22
16
|
def phase: () -> Symbol
|
|
23
17
|
|
|
24
|
-
# The guardrail class that triggered the block.
|
|
25
|
-
#
|
|
26
18
|
# --
|
|
27
19
|
# : () -> singleton(Riffer::Guardrail)
|
|
28
20
|
def guardrail: () -> singleton(Riffer::Guardrail)
|
|
29
21
|
|
|
30
|
-
# Converts the event to a hash.
|
|
31
|
-
#
|
|
32
22
|
# --
|
|
33
23
|
# : () -> Hash[Symbol, untyped]
|
|
34
24
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/interrupt.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents an interrupt during streaming, fired when a callback throws
|
|
4
|
-
# +:riffer_interrupt+.
|
|
5
3
|
class Riffer::StreamEvents::Interrupt < Riffer::StreamEvents::Base
|
|
6
|
-
# The reason provided with the interrupt, if any.
|
|
7
4
|
attr_reader reason: (String | Symbol)?
|
|
8
5
|
|
|
9
|
-
# Call ids of tool_use blocks riffer filled with placeholder results when the
|
|
10
|
-
# interrupt fired (only when history healing is on).
|
|
11
|
-
attr_reader healed_tool_call_ids: Array[String]
|
|
12
|
-
|
|
13
6
|
# --
|
|
14
|
-
# : (?reason: (String | Symbol)
|
|
15
|
-
def initialize: (?reason: (String | Symbol)
|
|
7
|
+
# : (?reason: (String | Symbol)?) -> void
|
|
8
|
+
def initialize: (?reason: (String | Symbol)?) -> void
|
|
16
9
|
|
|
17
|
-
# Converts the event to a hash.
|
|
18
10
|
# --
|
|
19
11
|
# : () -> Hash[Symbol, untyped]
|
|
20
12
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/reasoning_delta.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents an incremental reasoning chunk during streaming; only emitted by
|
|
4
|
-
# providers that support reasoning (e.g. OpenAI with the reasoning option).
|
|
5
3
|
class Riffer::StreamEvents::ReasoningDelta < Riffer::StreamEvents::Base
|
|
6
|
-
# The incremental reasoning content.
|
|
7
4
|
attr_reader content: String
|
|
8
5
|
|
|
9
6
|
# --
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/reasoning_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents one completed reasoning block during streaming; only emitted by
|
|
4
|
-
# providers that support reasoning (e.g. OpenAI with the reasoning option).
|
|
5
3
|
class Riffer::StreamEvents::ReasoningDone < Riffer::StreamEvents::Base
|
|
6
|
-
#
|
|
7
|
-
# message. Its +text+ is the content the preceding ReasoningDelta events
|
|
8
|
-
# added up to.
|
|
4
|
+
# +text+ is the concatenation of the preceding ReasoningDelta events.
|
|
9
5
|
attr_reader part: Riffer::Messages::Assistant::ReasoningPart
|
|
10
6
|
|
|
11
7
|
# --
|
|
@@ -1,9 +1,6 @@
|
|
|
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, via the +on_activate+
|
|
4
|
-
# callback when the LLM calls the activation tool.
|
|
5
3
|
class Riffer::StreamEvents::SkillActivation < Riffer::StreamEvents::Base
|
|
6
|
-
# The activated skill name.
|
|
7
4
|
attr_reader name: String
|
|
8
5
|
|
|
9
6
|
# --
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/text_delta.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents an incremental text chunk during streaming.
|
|
4
3
|
class Riffer::StreamEvents::TextDelta < Riffer::StreamEvents::Base
|
|
5
|
-
# The incremental text content.
|
|
6
4
|
attr_reader content: String
|
|
7
5
|
|
|
8
6
|
# --
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/text_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents completed text generation during streaming.
|
|
4
3
|
class Riffer::StreamEvents::TextDone < Riffer::StreamEvents::Base
|
|
5
|
-
# The complete text content.
|
|
6
4
|
attr_reader content: String
|
|
7
5
|
|
|
8
6
|
# --
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/token_usage_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Final token usage for the response, emitted when the LLM finishes.
|
|
4
3
|
class Riffer::StreamEvents::TokenUsageDone < Riffer::StreamEvents::Base
|
|
5
|
-
# The token usage data for this response.
|
|
6
4
|
attr_reader token_usage: Riffer::Providers::TokenUsage
|
|
7
5
|
|
|
8
6
|
# --
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/tool_call_delta.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents an incremental tool call chunk (partial argument data) during
|
|
4
|
-
# streaming.
|
|
5
3
|
class Riffer::StreamEvents::ToolCallDelta < Riffer::StreamEvents::Base
|
|
6
|
-
# The tool call item identifier.
|
|
7
4
|
attr_reader item_id: String
|
|
8
5
|
|
|
9
|
-
#
|
|
6
|
+
# Providers may send the name only on the first delta.
|
|
10
7
|
attr_reader name: String?
|
|
11
8
|
|
|
12
|
-
# The incremental arguments JSON fragment.
|
|
13
9
|
attr_reader arguments_delta: String
|
|
14
10
|
|
|
15
11
|
# --
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/tool_call_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents a completed tool call during streaming.
|
|
4
3
|
class Riffer::StreamEvents::ToolCallDone < Riffer::StreamEvents::Base
|
|
5
|
-
# The tool call item identifier.
|
|
6
4
|
attr_reader item_id: String
|
|
7
5
|
|
|
8
|
-
# The call identifier for response matching.
|
|
9
6
|
attr_reader call_id: String
|
|
10
7
|
|
|
11
|
-
# The tool name.
|
|
12
8
|
attr_reader name: String
|
|
13
9
|
|
|
14
|
-
# The complete arguments JSON string.
|
|
15
10
|
attr_reader arguments: String
|
|
16
11
|
|
|
17
12
|
# --
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/web_search_done.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# The result of a completed server-side web search during streaming.
|
|
4
3
|
class Riffer::StreamEvents::WebSearchDone < Riffer::StreamEvents::Base
|
|
5
|
-
# The search query used.
|
|
6
4
|
attr_reader query: String
|
|
7
5
|
|
|
8
|
-
# The search result sources with title and url.
|
|
9
6
|
attr_reader sources: Array[Hash[Symbol, String?]]
|
|
10
7
|
|
|
11
8
|
# --
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
# Generated from lib/riffer/stream_events/web_search_status.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# A web search status notification, emitted as a server-side web search
|
|
4
|
-
# progresses.
|
|
5
3
|
class Riffer::StreamEvents::WebSearchStatus < Riffer::StreamEvents::Base
|
|
6
|
-
#
|
|
4
|
+
# One of "in_progress", "searching", "open_page", or "completed".
|
|
7
5
|
attr_reader status: String
|
|
8
6
|
|
|
9
|
-
# The URL being fetched (present for "open_page" status).
|
|
10
7
|
attr_reader url: String?
|
|
11
8
|
|
|
12
|
-
# The search query (present when available during status changes).
|
|
13
9
|
attr_reader query: String?
|
|
14
10
|
|
|
15
11
|
# --
|
|
@@ -1,58 +1,22 @@
|
|
|
1
1
|
# Generated from lib/riffer/testing.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Builds throwaway agents and tools a test suite can resolve by identifier or
|
|
4
|
-
# constant name, and removes them again. Require <tt>riffer/testing/rspec</tt>
|
|
5
|
-
# or <tt>riffer/testing/minitest</tt> to get +stub_agent+/+stub_tool+ in every
|
|
6
|
-
# example plus per-test cleanup; otherwise include this module and call +reset!+
|
|
7
|
-
# from your own teardown, or call the methods on the module directly.
|
|
8
|
-
#
|
|
9
|
-
# Tracking is not synchronized — stub from a single-threaded test, before
|
|
10
|
-
# concurrent lookups begin.
|
|
11
3
|
module Riffer::Testing
|
|
12
4
|
self.@registrations: Array[[ Class, String? ]]?
|
|
13
5
|
|
|
14
6
|
CONST_NAME_PATTERN: Regexp
|
|
15
7
|
|
|
16
|
-
# Builds an agent class, evaluates the optional body in it, and makes it
|
|
17
|
-
# resolvable until the next +reset!+. A +name+ assigns a top-level constant
|
|
18
|
-
# and derives the identifier; the body may set +identifier+ like any other
|
|
19
|
-
# agent config.
|
|
20
|
-
#
|
|
21
|
-
# agent = stub_agent("SupportAgent") { model "mock/gpt-5-mini" }
|
|
22
|
-
#
|
|
23
|
-
# Raises Riffer::ArgumentError when the constant is already defined or the
|
|
24
|
-
# stub ends up with no identifier, and Riffer::DuplicateIdentifierError when
|
|
25
|
-
# another agent already holds the identifier.
|
|
26
|
-
#
|
|
27
8
|
# --
|
|
28
9
|
# : (?(String | Symbol)?, ?base: singleton(Riffer::Agent)) ?{ () [self: singleton(Riffer::Agent)] -> void } -> singleton(Riffer::Agent)
|
|
29
10
|
def stub_agent: (?(String | Symbol)?, ?base: singleton(Riffer::Agent)) ?{ () [self: singleton(Riffer::Agent)] -> void } -> singleton(Riffer::Agent)
|
|
30
11
|
|
|
31
|
-
# Builds a tool class, evaluates the optional body in it, and makes it
|
|
32
|
-
# resolvable until the next +reset!+. A +name+ assigns a top-level constant
|
|
33
|
-
# and derives the identifier; the body may set +identifier+ like any other
|
|
34
|
-
# tool config.
|
|
35
|
-
#
|
|
36
|
-
# tool = stub_tool("KbSearch") { def call(context:, **) = text("stubbed") }
|
|
37
|
-
#
|
|
38
|
-
# Raises Riffer::ArgumentError when the constant is already defined or the
|
|
39
|
-
# stub ends up with no identifier, and Riffer::DuplicateIdentifierError when
|
|
40
|
-
# another tool already holds the identifier.
|
|
41
|
-
#
|
|
42
12
|
# --
|
|
43
13
|
# : (?(String | Symbol)?, ?base: singleton(Riffer::Tool)) ?{ () [self: singleton(Riffer::Tool)] -> void } -> singleton(Riffer::Tool)
|
|
44
14
|
def stub_tool: (?(String | Symbol)?, ?base: singleton(Riffer::Tool)) ?{ () [self: singleton(Riffer::Tool)] -> void } -> singleton(Riffer::Tool)
|
|
45
15
|
|
|
46
|
-
# Removes every stub built since the last reset — its registration and any
|
|
47
|
-
# constant it created — newest first, and forgets them. A no-op when nothing
|
|
48
|
-
# has been stubbed.
|
|
49
16
|
# --
|
|
50
17
|
# : () -> void
|
|
51
18
|
def reset!: () -> void
|
|
52
19
|
|
|
53
|
-
# The stub classes awaiting cleanup. Lives on the module rather than the
|
|
54
|
-
# caller so an including test case and a direct
|
|
55
|
-
# <tt>Riffer::Testing.stub_*</tt> call share one list.
|
|
56
20
|
# --
|
|
57
21
|
# : () -> Array[[Class, String?]]
|
|
58
22
|
def self.registrations: () -> Array[[ Class, String? ]]
|
|
@@ -67,8 +31,6 @@ module Riffer::Testing
|
|
|
67
31
|
# : ((String | Symbol)?) -> String?
|
|
68
32
|
def validate_const_name: ((String | Symbol)?) -> String?
|
|
69
33
|
|
|
70
|
-
# A test may have removed or replaced the constant itself, so never clobber
|
|
71
|
-
# one that no longer points at the stub.
|
|
72
34
|
# --
|
|
73
35
|
# : (String, Class) -> void
|
|
74
36
|
def remove_stub_const: (String, Class) -> void
|
|
@@ -1,53 +1,26 @@
|
|
|
1
1
|
# Generated from lib/riffer/tool.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Base class for all tools in the Riffer framework. Subclasses must implement
|
|
4
|
-
# the +call+ method.
|
|
5
|
-
#
|
|
6
|
-
# class WeatherLookupTool < Riffer::Tool
|
|
7
|
-
# description "Provides current weather information for a specified city."
|
|
8
|
-
#
|
|
9
|
-
# params do
|
|
10
|
-
# required :city, String, description: "The city to look up"
|
|
11
|
-
# optional :units, String, default: "celsius"
|
|
12
|
-
# end
|
|
13
|
-
#
|
|
14
|
-
# def call(context:, city:, units: nil)
|
|
15
|
-
# # Implementation
|
|
16
|
-
# end
|
|
17
|
-
# end
|
|
18
3
|
class Riffer::Tool
|
|
19
4
|
extend Riffer::Tools::Toolable
|
|
20
5
|
|
|
21
6
|
extend Riffer::Registrable
|
|
22
7
|
|
|
23
|
-
# Executes the tool with the given arguments.
|
|
24
8
|
# --
|
|
25
9
|
# : (context: Riffer::Agent::Context?, **untyped) -> Riffer::Tools::Response
|
|
26
10
|
def call: (context: Riffer::Agent::Context?, **untyped) -> Riffer::Tools::Response
|
|
27
11
|
|
|
28
|
-
# Creates a text response.
|
|
29
|
-
#
|
|
30
12
|
# --
|
|
31
13
|
# : (untyped) -> Riffer::Tools::Response
|
|
32
14
|
def text: (untyped) -> Riffer::Tools::Response
|
|
33
15
|
|
|
34
|
-
# Creates a JSON response.
|
|
35
|
-
#
|
|
36
16
|
# --
|
|
37
17
|
# : (untyped) -> Riffer::Tools::Response
|
|
38
18
|
def json: (untyped) -> Riffer::Tools::Response
|
|
39
19
|
|
|
40
|
-
# Creates an error response.
|
|
41
|
-
#
|
|
42
20
|
# --
|
|
43
21
|
# : (String, ?type: Symbol) -> Riffer::Tools::Response
|
|
44
22
|
def error: (String, ?type: Symbol) -> Riffer::Tools::Response
|
|
45
23
|
|
|
46
|
-
# Executes the tool with validation and timeout, folding every +StandardError+
|
|
47
|
-
# into an error Response. Anything outside +StandardError+ — an unimplemented
|
|
48
|
-
# +#call+ above all — still propagates, because a broken tool is a broken
|
|
49
|
-
# deploy rather than a bad request.
|
|
50
|
-
#
|
|
51
24
|
# --
|
|
52
25
|
# : (context: Riffer::Agent::Context?, **untyped) -> Riffer::Tools::Response
|
|
53
26
|
def call_with_validation: (context: Riffer::Agent::Context?, **untyped) -> Riffer::Tools::Response
|
|
@@ -1,71 +1,45 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/response.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# class MyTool < Riffer::Tool
|
|
6
|
-
# def call(context:, **kwargs)
|
|
7
|
-
# result = perform_operation
|
|
8
|
-
# Riffer::Tools::Response.success(result)
|
|
9
|
-
# rescue MyError => e
|
|
10
|
-
# Riffer::Tools::Response.error(e.message)
|
|
11
|
-
# end
|
|
12
|
-
# end
|
|
3
|
+
# Every tool's +call+ must return one.
|
|
13
4
|
class Riffer::Tools::Response
|
|
14
5
|
@success: bool
|
|
15
6
|
|
|
16
7
|
VALID_FORMATS: Array[Symbol]
|
|
17
8
|
|
|
18
|
-
# The response content.
|
|
19
9
|
attr_reader content: String
|
|
20
10
|
|
|
21
|
-
# The error message, or +nil+ on success.
|
|
22
11
|
attr_reader error_message: String?
|
|
23
12
|
|
|
24
|
-
# The error type, or +nil+ on success.
|
|
25
13
|
attr_reader error_type: Symbol?
|
|
26
14
|
|
|
27
|
-
#
|
|
28
|
-
#
|
|
15
|
+
# Kept out of every serialized form so it never reaches an LLM or a message
|
|
16
|
+
# payload.
|
|
29
17
|
attr_reader exception: Exception?
|
|
30
18
|
|
|
31
|
-
# Creates a success response.
|
|
32
|
-
#
|
|
33
|
-
# Raises Riffer::ArgumentError if format is invalid.
|
|
34
|
-
#
|
|
35
19
|
# --
|
|
36
20
|
# : (untyped, ?format: Symbol) -> Riffer::Tools::Response
|
|
37
21
|
def self.success: (untyped, ?format: Symbol) -> Riffer::Tools::Response
|
|
38
22
|
|
|
39
|
-
# Creates a success response with text format.
|
|
40
|
-
#
|
|
41
23
|
# --
|
|
42
24
|
# : (untyped) -> Riffer::Tools::Response
|
|
43
25
|
def self.text: (untyped) -> Riffer::Tools::Response
|
|
44
26
|
|
|
45
|
-
# Creates a success response with JSON format.
|
|
46
|
-
#
|
|
47
27
|
# --
|
|
48
28
|
# : (untyped) -> Riffer::Tools::Response
|
|
49
29
|
def self.json: (untyped) -> Riffer::Tools::Response
|
|
50
30
|
|
|
51
|
-
# Creates an error response.
|
|
52
|
-
#
|
|
53
31
|
# --
|
|
54
32
|
# : (String, ?type: Symbol, ?exception: Exception?) -> Riffer::Tools::Response
|
|
55
33
|
def self.error: (String, ?type: Symbol, ?exception: Exception?) -> Riffer::Tools::Response
|
|
56
34
|
|
|
57
|
-
# Returns true if the tool execution succeeded.
|
|
58
35
|
# --
|
|
59
36
|
# : () -> bool
|
|
60
37
|
def success?: () -> bool
|
|
61
38
|
|
|
62
|
-
# Returns true if the tool execution failed.
|
|
63
39
|
# --
|
|
64
40
|
# : () -> bool
|
|
65
41
|
def error?: () -> bool
|
|
66
42
|
|
|
67
|
-
# Returns a hash representation of the response.
|
|
68
|
-
#
|
|
69
43
|
# --
|
|
70
44
|
# : () -> Hash[Symbol, untyped]
|
|
71
45
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/runtime/fibers.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Executes tool calls concurrently using fibers via the +async+ gem.
|
|
4
|
-
#
|
|
5
|
-
# class MyAgent < Riffer::Agent
|
|
6
|
-
# tool_runtime Riffer::Tools::Runtime::Fibers
|
|
7
|
-
# end
|
|
8
3
|
class Riffer::Tools::Runtime::Fibers < Riffer::Tools::Runtime
|
|
9
4
|
# --
|
|
10
5
|
# : (?max_concurrency: Integer?) -> void
|