riffer 0.47.2 → 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 +42 -0
- data/docs/AGENTS.md +39 -7
- data/docs/AGENT_LIFECYCLE.md +14 -16
- data/docs/CONFIGURATION.md +23 -34
- data/docs/EVALS.md +2 -1
- data/docs/MCP.md +0 -4
- data/docs/MESSAGES.md +85 -17
- data/docs/STREAM_EVENTS.md +8 -4
- data/docs/TOOL_ADVANCED.md +1 -3
- data/docs/TRACING.md +2 -2
- data/docs/providers/AMAZON_BEDROCK.md +32 -1
- data/docs/providers/CUSTOM_PROVIDERS.md +56 -4
- data/docs/providers/GEMINI.md +1 -1
- data/docs/providers/MOCK_PROVIDER.md +17 -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 +27 -44
- data/lib/riffer/agent/context.rb +2 -26
- data/lib/riffer/agent/outcome.rb +0 -20
- data/lib/riffer/agent/response.rb +4 -35
- data/lib/riffer/agent/run.rb +32 -48
- data/lib/riffer/agent/serializer.rb +10 -39
- data/lib/riffer/agent/session/repair.rb +3 -15
- data/lib/riffer/agent/session.rb +26 -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 +31 -127
- 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 +22 -23
- data/lib/riffer/evals/evaluator_runner.rb +0 -15
- data/lib/riffer/evals/judge.rb +9 -11
- 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 +5 -10
- 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 +37 -0
- 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 +73 -0
- data/lib/riffer/messages/assistant/tool_call.rb +55 -0
- data/lib/riffer/messages/assistant.rb +43 -15
- data/lib/riffer/messages/base.rb +5 -33
- data/lib/riffer/messages/system.rb +8 -1
- data/lib/riffer/messages/tool.rb +15 -13
- data/lib/riffer/messages/{file_part.rb → user/file_part.rb} +16 -40
- data/lib/riffer/messages/user.rb +11 -4
- data/lib/riffer/params/boolean.rb +1 -5
- data/lib/riffer/params/param.rb +15 -31
- data/lib/riffer/params.rb +15 -39
- data/lib/riffer/providers/amazon_bedrock.rb +104 -44
- data/lib/riffer/providers/anthropic.rb +11 -26
- data/lib/riffer/providers/azure_open_ai.rb +3 -8
- data/lib/riffer/providers/base.rb +30 -32
- data/lib/riffer/providers/finish_reason.rb +0 -6
- data/lib/riffer/providers/gemini/client.rb +4 -17
- data/lib/riffer/providers/gemini.rb +6 -12
- data/lib/riffer/providers/mock.rb +18 -27
- data/lib/riffer/providers/open_ai.rb +12 -21
- data/lib/riffer/providers/open_router.rb +109 -33
- data/lib/riffer/providers/repository.rb +2 -14
- data/lib/riffer/providers/token_usage.rb +19 -12
- 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 +13 -17
- 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 +6 -8
- 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 +8 -30
- data/lib/riffer/tools/toolable.rb +0 -37
- data/lib/riffer/tracing/capture.rb +5 -9
- 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 +24 -46
- 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 +4 -27
- data/sig/generated/riffer/agent/run.rbs +12 -31
- 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 +25 -125
- 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 +12 -21
- data/sig/generated/riffer/evals/evaluator_runner.rbs +0 -14
- data/sig/generated/riffer/evals/judge.rbs +4 -8
- 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 +6 -13
- 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 +13 -0
- 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 +45 -0
- data/sig/generated/riffer/messages/assistant/tool_call.rbs +34 -0
- data/sig/generated/riffer/messages/assistant.rbs +25 -31
- data/sig/generated/riffer/messages/base.rbs +0 -12
- data/sig/generated/riffer/messages/system.rbs +4 -1
- data/sig/generated/riffer/messages/tool.rbs +4 -10
- data/sig/generated/riffer/messages/user/file_part.rbs +76 -0
- data/sig/generated/riffer/messages/user.rbs +7 -5
- data/sig/generated/riffer/params/boolean.rbs +1 -4
- data/sig/generated/riffer/params/param.rbs +7 -31
- data/sig/generated/riffer/params.rbs +8 -38
- data/sig/generated/riffer/providers/amazon_bedrock.rbs +33 -29
- data/sig/generated/riffer/providers/anthropic.rbs +2 -12
- data/sig/generated/riffer/providers/azure_open_ai.rbs +0 -8
- data/sig/generated/riffer/providers/base.rbs +18 -34
- 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 +4 -10
- data/sig/generated/riffer/providers/mock.rbs +6 -27
- data/sig/generated/riffer/providers/open_ai.rbs +6 -13
- data/sig/generated/riffer/providers/open_router.rbs +37 -18
- data/sig/generated/riffer/providers/repository.rbs +2 -14
- data/sig/generated/riffer/providers/token_usage.rbs +9 -12
- 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 +6 -17
- 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 +4 -6
- 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 +4 -26
- data/sig/generated/riffer/tools/toolable.rbs +0 -37
- data/sig/generated/riffer/tracing/capture.rbs +6 -9
- 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/deep_dup.rbs +5 -0
- data/sig/manual/riffer/helpers/validate.rbs +5 -0
- metadata +39 -3
- data/sig/generated/riffer/messages/file_part.rbs +0 -101
|
@@ -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
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/runtime/threaded.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Executes tool calls concurrently using threads.
|
|
4
|
-
#
|
|
5
|
-
# class MyAgent < Riffer::Agent
|
|
6
|
-
# tool_runtime Riffer::Tools::Runtime::Threaded
|
|
7
|
-
# end
|
|
8
3
|
class Riffer::Tools::Runtime::Threaded < Riffer::Tools::Runtime
|
|
9
4
|
DEFAULT_MAX_CONCURRENCY: Integer
|
|
10
5
|
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/runtime.rb with RBS::Inline
|
|
2
2
|
|
|
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).
|
|
6
3
|
class Riffer::Tools::Runtime
|
|
7
4
|
@runner: Riffer::Runner
|
|
8
5
|
|
|
@@ -10,25 +7,11 @@ class Riffer::Tools::Runtime
|
|
|
10
7
|
# : (runner: Riffer::Runner) -> void
|
|
11
8
|
def initialize: (runner: Riffer::Runner) -> void
|
|
12
9
|
|
|
13
|
-
# Executes a batch of tool calls, returning <tt>[tool_call, response]</tt> pairs.
|
|
14
10
|
# --
|
|
15
11
|
# : (Array[Riffer::Messages::Assistant::ToolCall], tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?, ?tags: Hash[String, String]) -> Array[[Riffer::Messages::Assistant::ToolCall, Riffer::Tools::Response]]
|
|
16
12
|
def execute: (Array[Riffer::Messages::Assistant::ToolCall], tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?, ?tags: Hash[String, String]) -> Array[[ Riffer::Messages::Assistant::ToolCall, Riffer::Tools::Response ]]
|
|
17
13
|
|
|
18
|
-
#
|
|
19
|
-
# customize. Must +yield+ to continue.
|
|
20
|
-
#
|
|
21
|
-
# class InstrumentedRuntime < Riffer::Tools::Runtime::Inline
|
|
22
|
-
# private
|
|
23
|
-
#
|
|
24
|
-
# def around_tool_call(tool_call, context:, assistant_message: nil)
|
|
25
|
-
# start = Time.now
|
|
26
|
-
# result = yield
|
|
27
|
-
# Rails.logger.info("Tool #{tool_call.name} took #{Time.now - start}s")
|
|
28
|
-
# result
|
|
29
|
-
# end
|
|
30
|
-
# end
|
|
31
|
-
#
|
|
14
|
+
# Overrides must +yield+ and return its Response.
|
|
32
15
|
# --
|
|
33
16
|
# : (Riffer::Messages::Assistant::ToolCall, context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) { () -> Riffer::Tools::Response } -> Riffer::Tools::Response
|
|
34
17
|
def around_tool_call: (Riffer::Messages::Assistant::ToolCall, context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) { () -> Riffer::Tools::Response } -> Riffer::Tools::Response
|
|
@@ -39,15 +22,15 @@ class Riffer::Tools::Runtime
|
|
|
39
22
|
# : (Riffer::Messages::Assistant::ToolCall, ?Hash[String, String]) { () -> Riffer::Tools::Response } -> [Riffer::Messages::Assistant::ToolCall, Riffer::Tools::Response]
|
|
40
23
|
def instrument_tool_call: (Riffer::Messages::Assistant::ToolCall, ?Hash[String, String]) { () -> Riffer::Tools::Response } -> [ Riffer::Messages::Assistant::ToolCall, Riffer::Tools::Response ]
|
|
41
24
|
|
|
25
|
+
# Subclasses override this to dispatch elsewhere (e.g. HTTP, gRPC).
|
|
42
26
|
# --
|
|
43
27
|
# : (Riffer::Messages::Assistant::ToolCall, tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Riffer::Tools::Response
|
|
44
28
|
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
|
|
45
29
|
|
|
46
30
|
# --
|
|
47
|
-
# : (String
|
|
48
|
-
def parse_arguments: (String
|
|
31
|
+
# : (String) -> untyped
|
|
32
|
+
def parse_arguments: (String) -> untyped
|
|
49
33
|
|
|
50
|
-
# Emitted outside +around_tool_call+ so host enrichment spans nest beneath it.
|
|
51
34
|
# --
|
|
52
35
|
# : [R] (Riffer::Messages::Assistant::ToolCall, ?Hash[String, String]) { ((Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span)) -> R } -> R
|
|
53
36
|
def in_tool_span: [R] (Riffer::Messages::Assistant::ToolCall, ?Hash[String, String]) { (Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span) -> R } -> R
|
|
@@ -56,15 +39,10 @@ class Riffer::Tools::Runtime
|
|
|
56
39
|
# : (Riffer::Messages::Assistant::ToolCall, ?Hash[String, String]) -> Hash[String, untyped]
|
|
57
40
|
def tool_span_attributes: (Riffer::Messages::Assistant::ToolCall, ?Hash[String, String]) -> Hash[String, untyped]
|
|
58
41
|
|
|
59
|
-
# Maps normalized tags to their namespaced span attribute form. An empty map
|
|
60
|
-
# yields an empty hash, so merging it is a no-op.
|
|
61
42
|
# --
|
|
62
43
|
# : (Hash[String, String]) -> Hash[String, String]
|
|
63
44
|
def tag_attributes: (Hash[String, String]) -> Hash[String, String]
|
|
64
45
|
|
|
65
|
-
# A deliberate error Response is a handled outcome, so its status stays unset.
|
|
66
|
-
# An error status is reserved for a Response carrying the exception it was
|
|
67
|
-
# folded from — the tool failed for a reason nobody anticipated.
|
|
68
46
|
# --
|
|
69
47
|
# : ((Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span), Riffer::Tools::Response) -> void
|
|
70
48
|
def record_tool_outcome: (Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span, Riffer::Tools::Response) -> void
|
|
@@ -1,19 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/tools/toolable.rb with RBS::Inline
|
|
2
2
|
|
|
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.
|
|
6
|
-
#
|
|
7
|
-
# class MyTool
|
|
8
|
-
# extend Riffer::Tools::Toolable
|
|
9
|
-
#
|
|
10
|
-
# description "Does something useful"
|
|
11
|
-
#
|
|
12
|
-
# params do
|
|
13
|
-
# required :input, String
|
|
14
|
-
# end
|
|
15
|
-
# end
|
|
16
|
-
#
|
|
17
3
|
# @rbs module-self Module
|
|
18
4
|
module Riffer::Tools::Toolable : Module
|
|
19
5
|
@kind: Symbol?
|
|
@@ -30,69 +16,46 @@ module Riffer::Tools::Toolable : Module
|
|
|
30
16
|
|
|
31
17
|
DEFAULT_TIMEOUT: Integer
|
|
32
18
|
|
|
33
|
-
# Tracks all classes that extend Toolable.
|
|
34
|
-
#
|
|
35
19
|
# --
|
|
36
20
|
# : (Module) -> void
|
|
37
21
|
def self.extended: (Module) -> void
|
|
38
22
|
|
|
39
|
-
# Returns all classes that have extended Toolable.
|
|
40
|
-
#
|
|
41
23
|
# --
|
|
42
24
|
# : () -> Array[Module]
|
|
43
25
|
def self.all: () -> Array[Module]
|
|
44
26
|
|
|
45
|
-
# Gets or sets the tool description.
|
|
46
|
-
#
|
|
47
27
|
# --
|
|
48
28
|
# : (?String?) -> String?
|
|
49
29
|
def description: (?String?) -> String?
|
|
50
30
|
|
|
51
|
-
# Gets or sets the tool identifier/name.
|
|
52
|
-
#
|
|
53
31
|
# --
|
|
54
32
|
# : (?String?) -> String
|
|
55
33
|
def identifier: (?String?) -> String
|
|
56
34
|
|
|
57
|
-
# Alias for identifier — used by providers.
|
|
58
|
-
#
|
|
59
35
|
# --
|
|
60
36
|
# : (?String?) -> String
|
|
61
37
|
def name: (?String?) -> String
|
|
62
38
|
|
|
63
|
-
# Gets or sets the tool timeout in seconds.
|
|
64
|
-
#
|
|
65
39
|
# --
|
|
66
40
|
# : (?(Integer | Float)?) -> (Integer | Float)
|
|
67
41
|
def timeout: (?(Integer | Float)?) -> (Integer | Float)
|
|
68
42
|
|
|
69
|
-
# Defines parameters using the Params DSL.
|
|
70
|
-
#
|
|
71
43
|
# --
|
|
72
44
|
# : () ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> Riffer::Params?
|
|
73
45
|
def params: () ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> Riffer::Params?
|
|
74
46
|
|
|
75
|
-
# Returns the JSON Schema for the tool's parameters.
|
|
76
|
-
#
|
|
77
47
|
# --
|
|
78
48
|
# : (?strict: bool) -> Hash[Symbol, untyped]
|
|
79
49
|
def parameters_schema: (?strict: bool) -> Hash[Symbol, untyped]
|
|
80
50
|
|
|
81
|
-
# Returns the kind of toolable entity; defaults to +:tool+.
|
|
82
51
|
# --
|
|
83
52
|
# : (?Symbol?) -> Symbol
|
|
84
53
|
def kind: (?Symbol?) -> Symbol
|
|
85
54
|
|
|
86
|
-
# Returns a provider-agnostic tool schema hash.
|
|
87
|
-
#
|
|
88
55
|
# --
|
|
89
56
|
# : (?strict: bool) -> Hash[Symbol, untyped]
|
|
90
57
|
def to_tool_schema: (?strict: bool) -> Hash[Symbol, untyped]
|
|
91
58
|
|
|
92
|
-
# Validates that the minimum required metadata is present for LLM tool use.
|
|
93
|
-
#
|
|
94
|
-
# Raises Riffer::ArgumentError if validation fails.
|
|
95
|
-
#
|
|
96
59
|
# --
|
|
97
60
|
# : () -> true
|
|
98
61
|
def validate_as_tool!: () -> true
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/tracing/capture.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Serializes riffer messages into the GenAI semconv JSON message structure
|
|
4
|
-
# for opt-in span content capture. File parts become metadata-only stubs —
|
|
5
|
-
# bytes and URLs never reach a span attribute.
|
|
6
3
|
module Riffer::Tracing::Capture
|
|
7
4
|
# --
|
|
8
5
|
# : (Array[Riffer::Messages::Base]) -> String
|
|
@@ -35,12 +32,12 @@ module Riffer::Tracing::Capture
|
|
|
35
32
|
def tool_call_part: (Riffer::Messages::Assistant::ToolCall) -> Hash[Symbol, untyped]
|
|
36
33
|
|
|
37
34
|
# --
|
|
38
|
-
# : (Riffer::Messages::FilePart) -> Hash[Symbol, untyped]
|
|
39
|
-
def file_part: (Riffer::Messages::FilePart) -> Hash[Symbol, untyped]
|
|
35
|
+
# : (Riffer::Messages::User::FilePart) -> Hash[Symbol, untyped]
|
|
36
|
+
def file_part: (Riffer::Messages::User::FilePart) -> Hash[Symbol, untyped]
|
|
40
37
|
|
|
41
|
-
# Semconv's tool_call part carries arguments as a JSON object
|
|
42
|
-
#
|
|
38
|
+
# Semconv's tool_call part carries arguments as a JSON object, so a string
|
|
39
|
+
# would be double-encoded.
|
|
43
40
|
# --
|
|
44
|
-
# : (
|
|
45
|
-
def parse_arguments: (
|
|
41
|
+
# : (String) -> untyped
|
|
42
|
+
def parse_arguments: (String) -> untyped
|
|
46
43
|
end
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/tracing/no_op.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# No-op tracing backend, used when OTEL is unavailable or tracing is
|
|
4
|
-
# disabled.
|
|
5
3
|
module Riffer::Tracing::NoOp
|
|
6
|
-
# No-op stand-in for a span; answers <tt>recording?</tt> with +false+ so
|
|
7
|
-
# callers can skip expensive attribute serialization.
|
|
8
4
|
class Span
|
|
9
5
|
# --
|
|
10
6
|
# : (String, untyped) -> void
|
|
@@ -29,17 +25,14 @@ module Riffer::Tracing::NoOp
|
|
|
29
25
|
|
|
30
26
|
SPAN: Riffer::Tracing::NoOp::Span
|
|
31
27
|
|
|
32
|
-
# Yields the no-op span, ignoring all span options.
|
|
33
28
|
# --
|
|
34
29
|
# : [R] (String, **untyped) { (Riffer::Tracing::NoOp::Span) -> R } -> R
|
|
35
30
|
def in_span: [R] (String, **untyped) { (Riffer::Tracing::NoOp::Span) -> R } -> R
|
|
36
31
|
|
|
37
|
-
# Returns +nil+; there is no trace context without OTEL.
|
|
38
32
|
# --
|
|
39
33
|
# : () -> nil
|
|
40
34
|
def current_context: () -> nil
|
|
41
35
|
|
|
42
|
-
# Yields immediately; there is no context to attach.
|
|
43
36
|
# --
|
|
44
37
|
# : [R] (untyped) { () -> R } -> R
|
|
45
38
|
def with_context: [R] (untyped) { () -> R } -> R
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
# Generated from lib/riffer/tracing/otel.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# OpenTelemetry API is absent.
|
|
3
|
+
# <tt>::OpenTelemetry</tt> constants must appear only inside method bodies, so
|
|
4
|
+
# the gem eager-loads cleanly when the OpenTelemetry API is absent.
|
|
6
5
|
class Riffer::Tracing::Otel
|
|
7
6
|
# :nodoc: all
|
|
8
7
|
SUPPORTED_API_VERSIONS: Gem::Requirement
|
|
9
8
|
|
|
10
|
-
#
|
|
11
|
-
#
|
|
9
|
+
# Keeps callers from touching <tt>::OpenTelemetry</tt> constants (status
|
|
10
|
+
# objects in particular).
|
|
12
11
|
class Span
|
|
13
12
|
@otel_span: untyped
|
|
14
13
|
|
|
@@ -28,7 +27,6 @@ class Riffer::Tracing::Otel
|
|
|
28
27
|
# : (Exception) -> void
|
|
29
28
|
def record_exception: (Exception) -> void
|
|
30
29
|
|
|
31
|
-
# Marks the span status as error.
|
|
32
30
|
# --
|
|
33
31
|
# : (?String) -> void
|
|
34
32
|
def error!: (?String) -> void
|
|
@@ -38,21 +36,17 @@ class Riffer::Tracing::Otel
|
|
|
38
36
|
def recording?: () -> bool
|
|
39
37
|
end
|
|
40
38
|
|
|
41
|
-
#
|
|
42
|
-
# version; returns +nil+ so resolution falls back to NoOp. +provider+
|
|
43
|
-
# defaults to the global <tt>OpenTelemetry.tracer_provider</tt>.
|
|
39
|
+
# Returns +nil+ so resolution falls back to NoOp.
|
|
44
40
|
# --
|
|
45
41
|
# : (?provider: untyped) -> Riffer::Tracing::Otel?
|
|
46
42
|
def self.build: (?provider: untyped) -> Riffer::Tracing::Otel?
|
|
47
43
|
|
|
48
|
-
# Whether the OpenTelemetry API gem is loadable at a supported version.
|
|
49
44
|
# --
|
|
50
45
|
# : () -> bool
|
|
51
46
|
def self.available?: () -> bool
|
|
52
47
|
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
# against an incompatible API.
|
|
48
|
+
# opentelemetry-api is undeclared, so this is the only protection against
|
|
49
|
+
# an incompatible API.
|
|
56
50
|
# --
|
|
57
51
|
# : (Gem::Version) -> bool
|
|
58
52
|
def self.supported?: (Gem::Version) -> bool
|
|
@@ -67,17 +61,14 @@ class Riffer::Tracing::Otel
|
|
|
67
61
|
# : (provider: untyped) -> void
|
|
68
62
|
def initialize: (provider: untyped) -> void
|
|
69
63
|
|
|
70
|
-
# Opens an OTEL span around the block, yielding the wrapped span.
|
|
71
64
|
# --
|
|
72
65
|
# : [R] (String, attributes: Hash[String, untyped]?, kind: Symbol) { (Riffer::Tracing::Otel::Span) -> R } -> R
|
|
73
66
|
def in_span: [R] (String, attributes: Hash[String, untyped]?, kind: Symbol) { (Riffer::Tracing::Otel::Span) -> R } -> R
|
|
74
67
|
|
|
75
|
-
# Returns the active OTEL context.
|
|
76
68
|
# --
|
|
77
69
|
# : () -> untyped
|
|
78
70
|
def current_context: () -> untyped
|
|
79
71
|
|
|
80
|
-
# Runs the block with the given OTEL context active.
|
|
81
72
|
# --
|
|
82
73
|
# : [R] (untyped) { () -> R } -> R
|
|
83
74
|
def with_context: [R] (untyped) { () -> R } -> R
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/tracing/stream_recorder.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Wraps a stream yielder to observe terminal events for span stamping while
|
|
4
|
-
# forwarding every event downstream untouched.
|
|
5
3
|
class Riffer::Tracing::StreamRecorder
|
|
6
4
|
@yielder: Enumerator::Yielder
|
|
7
5
|
|
|
@@ -1,52 +1,33 @@
|
|
|
1
1
|
# Generated from lib/riffer/tracing.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
# dependency.
|
|
3
|
+
# No-ops unless the host bundles the OpenTelemetry API, so riffer never
|
|
4
|
+
# declares an OTEL dependency.
|
|
6
5
|
module Riffer::Tracing
|
|
7
|
-
@backend: untyped
|
|
8
|
-
|
|
9
|
-
MUTEX: Mutex
|
|
10
|
-
|
|
11
6
|
# The Ruby API cannot attach a schema URL to a tracer, so the semconv pin
|
|
12
7
|
# lives here as the documented contract version.
|
|
13
8
|
SCHEMA_URL: String
|
|
14
9
|
|
|
15
|
-
# Opens a span around the block, yielding the span.
|
|
16
10
|
# --
|
|
17
11
|
# : [R] (String, ?attributes: Hash[String, untyped]?, ?kind: Symbol) { (Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span) -> R } -> R
|
|
18
12
|
def in_span: [R] (String, ?attributes: Hash[String, untyped]?, ?kind: Symbol) { (Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span) -> R } -> R
|
|
19
13
|
|
|
20
|
-
#
|
|
21
|
-
# thread boundaries.
|
|
14
|
+
# For re-attachment across fiber or thread boundaries.
|
|
22
15
|
# --
|
|
23
16
|
# : () -> untyped
|
|
24
17
|
def current_context: () -> untyped
|
|
25
18
|
|
|
26
|
-
#
|
|
27
|
-
# so captures taken while tracing was dark stay harmless.
|
|
19
|
+
# +nil+ passes through so captures taken while tracing was off stay harmless.
|
|
28
20
|
# --
|
|
29
21
|
# : [R] (untyped) { () -> R } -> R
|
|
30
22
|
def with_context: [R] (untyped) { () -> R } -> R
|
|
31
23
|
|
|
32
|
-
# Stamps token usage onto the span — the <tt>gen_ai.usage.*</tt> counts and,
|
|
33
|
-
# when the model was priced, <tt>riffer.cost</tt>.
|
|
34
24
|
# --
|
|
35
25
|
# : ((Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span), Riffer::Providers::TokenUsage?) -> void
|
|
36
26
|
def record_usage: (Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span, Riffer::Providers::TokenUsage?) -> void
|
|
37
27
|
|
|
38
|
-
# Discards the resolved backend so the next span re-resolves it.
|
|
39
|
-
# --
|
|
40
|
-
# : () -> void
|
|
41
|
-
def reset!: () -> void
|
|
42
|
-
|
|
43
28
|
private
|
|
44
29
|
|
|
45
30
|
# --
|
|
46
31
|
# : () -> untyped
|
|
47
32
|
def backend: () -> untyped
|
|
48
|
-
|
|
49
|
-
# --
|
|
50
|
-
# : () -> untyped
|
|
51
|
-
def resolve_backend: () -> untyped
|
|
52
33
|
end
|
data/sig/generated/riffer.rbs
CHANGED
|
@@ -3,89 +3,62 @@
|
|
|
3
3
|
module Riffer
|
|
4
4
|
@config: Riffer::Config?
|
|
5
5
|
|
|
6
|
-
# Base error class for Riffer.
|
|
7
6
|
class Error < StandardError
|
|
8
7
|
end
|
|
9
8
|
|
|
10
|
-
# Raised when invalid arguments are provided.
|
|
11
9
|
class ArgumentError < ::ArgumentError
|
|
12
10
|
end
|
|
13
11
|
|
|
14
|
-
# Raised when tool parameter validation fails.
|
|
15
12
|
class ValidationError < Error
|
|
16
13
|
end
|
|
17
14
|
|
|
18
|
-
#
|
|
19
|
-
# timeout. Rescue it in the tool to clean up; otherwise it becomes a
|
|
15
|
+
# Rescue it in the tool to clean up; otherwise it becomes a
|
|
20
16
|
# +:timeout_error+ response.
|
|
21
17
|
class TimeoutError < Error
|
|
22
18
|
end
|
|
23
19
|
|
|
24
|
-
# Raised when a tool encounters an expected execution error.
|
|
25
20
|
class ToolExecutionError < Error
|
|
26
21
|
end
|
|
27
22
|
|
|
28
|
-
#
|
|
29
|
-
# messageStop, Anthropic's message_stop, OpenAI's response.completed /
|
|
30
|
-
# incomplete / failed), so a truncated or empty response is never returned
|
|
31
|
-
# as a complete message. Events already yielded were delivered; the
|
|
32
|
-
# request is safe to retry.
|
|
23
|
+
# Events already yielded were delivered; the request is safe to retry.
|
|
33
24
|
class IncompleteStreamError < Error
|
|
34
25
|
end
|
|
35
26
|
|
|
36
|
-
# Base error for a file attachment that can't be resolved for the provider.
|
|
37
27
|
class FileError < Error
|
|
38
28
|
end
|
|
39
29
|
|
|
40
|
-
# Raised when the provider can't accept the file at all.
|
|
41
30
|
class FileUnsupportedError < FileError
|
|
42
31
|
end
|
|
43
32
|
|
|
44
|
-
# Raised when a download is required but Riffer.config.files.allow_downloads is false.
|
|
45
33
|
class FileDownloadsDisabledError < FileError
|
|
46
34
|
end
|
|
47
35
|
|
|
48
|
-
# Raised when a message carries more files than Riffer.config.files.max_per_message allows.
|
|
49
36
|
class TooManyFilesError < FileError
|
|
50
37
|
end
|
|
51
38
|
|
|
52
|
-
# Raised when there's an issue downloading a file
|
|
53
39
|
class FileDownloadError < FileError
|
|
54
40
|
end
|
|
55
41
|
|
|
56
|
-
# Raised when a file size exceeds Riffer.config.files.max_bytes
|
|
57
42
|
class FileTooLargeError < FileError
|
|
58
43
|
end
|
|
59
44
|
|
|
60
|
-
# Raised when a downloaded or inline file's sha256 doesn't match.
|
|
61
45
|
class FileChecksumMismatchError < FileError
|
|
62
46
|
end
|
|
63
47
|
|
|
64
|
-
# Raised when a FilePart's data isn't valid base64
|
|
65
48
|
class FileEncodingError < FileError
|
|
66
49
|
end
|
|
67
50
|
|
|
68
|
-
# Raised when two registered subclasses share the same identifier.
|
|
69
51
|
class DuplicateIdentifierError < Error
|
|
70
52
|
end
|
|
71
53
|
|
|
72
|
-
# Returns the Riffer configuration.
|
|
73
|
-
#
|
|
74
54
|
# --
|
|
75
55
|
# : () -> Riffer::Config
|
|
76
56
|
def config: () -> Riffer::Config
|
|
77
57
|
|
|
78
|
-
# Yields the configuration for block-based setup.
|
|
79
|
-
#
|
|
80
|
-
# Riffer.configure do |config|
|
|
81
|
-
# config.openai.api_key = ENV['OPENAI_API_KEY']
|
|
82
|
-
# end
|
|
83
|
-
#
|
|
84
58
|
# --
|
|
85
59
|
# : () ?{ (Riffer::Config) -> void } -> void
|
|
86
60
|
def configure: () ?{ (Riffer::Config) -> void } -> void
|
|
87
61
|
|
|
88
|
-
# Returns the gem version.
|
|
89
62
|
# --
|
|
90
63
|
# : () -> String
|
|
91
64
|
def version: () -> String
|