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,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,6 +22,7 @@ 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
|
|
@@ -47,7 +31,6 @@ class Riffer::Tools::Runtime
|
|
|
47
31
|
# : (String) -> untyped
|
|
48
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
|
|
@@ -38,8 +35,8 @@ module Riffer::Tracing::Capture
|
|
|
38
35
|
# : (Riffer::Messages::User::FilePart) -> Hash[Symbol, untyped]
|
|
39
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
41
|
# : (String) -> untyped
|
|
45
42
|
def parse_arguments: (String) -> untyped
|
|
@@ -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
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: riffer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.49.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jake Bottrall
|
|
@@ -119,6 +119,19 @@ files:
|
|
|
119
119
|
- lib/riffer/agent/structured_output.rb
|
|
120
120
|
- lib/riffer/agent/structured_output/result.rb
|
|
121
121
|
- lib/riffer/config.rb
|
|
122
|
+
- lib/riffer/config/amazon_bedrock.rb
|
|
123
|
+
- lib/riffer/config/anthropic.rb
|
|
124
|
+
- lib/riffer/config/azure_open_ai.rb
|
|
125
|
+
- lib/riffer/config/evals.rb
|
|
126
|
+
- lib/riffer/config/files.rb
|
|
127
|
+
- lib/riffer/config/gemini.rb
|
|
128
|
+
- lib/riffer/config/mcp.rb
|
|
129
|
+
- lib/riffer/config/open_ai.rb
|
|
130
|
+
- lib/riffer/config/open_router.rb
|
|
131
|
+
- lib/riffer/config/pricing.rb
|
|
132
|
+
- lib/riffer/config/pricing/rates.rb
|
|
133
|
+
- lib/riffer/config/skills.rb
|
|
134
|
+
- lib/riffer/config/tracing.rb
|
|
122
135
|
- lib/riffer/evals.rb
|
|
123
136
|
- lib/riffer/evals/evaluator.rb
|
|
124
137
|
- lib/riffer/evals/evaluator_runner.rb
|
|
@@ -141,6 +154,7 @@ files:
|
|
|
141
154
|
- lib/riffer/helpers/deep_dup.rb
|
|
142
155
|
- lib/riffer/helpers/dependencies.rb
|
|
143
156
|
- lib/riffer/helpers/identifier.rb
|
|
157
|
+
- lib/riffer/helpers/validate.rb
|
|
144
158
|
- lib/riffer/mcp.rb
|
|
145
159
|
- lib/riffer/mcp/authenticated_tool.rb
|
|
146
160
|
- lib/riffer/mcp/client.rb
|
|
@@ -253,6 +267,19 @@ files:
|
|
|
253
267
|
- sig/generated/riffer/agent/structured_output.rbs
|
|
254
268
|
- sig/generated/riffer/agent/structured_output/result.rbs
|
|
255
269
|
- sig/generated/riffer/config.rbs
|
|
270
|
+
- sig/generated/riffer/config/amazon_bedrock.rbs
|
|
271
|
+
- sig/generated/riffer/config/anthropic.rbs
|
|
272
|
+
- sig/generated/riffer/config/azure_open_ai.rbs
|
|
273
|
+
- sig/generated/riffer/config/evals.rbs
|
|
274
|
+
- sig/generated/riffer/config/files.rbs
|
|
275
|
+
- sig/generated/riffer/config/gemini.rbs
|
|
276
|
+
- sig/generated/riffer/config/mcp.rbs
|
|
277
|
+
- sig/generated/riffer/config/open_ai.rbs
|
|
278
|
+
- sig/generated/riffer/config/open_router.rbs
|
|
279
|
+
- sig/generated/riffer/config/pricing.rbs
|
|
280
|
+
- sig/generated/riffer/config/pricing/rates.rbs
|
|
281
|
+
- sig/generated/riffer/config/skills.rbs
|
|
282
|
+
- sig/generated/riffer/config/tracing.rbs
|
|
256
283
|
- sig/generated/riffer/evals.rbs
|
|
257
284
|
- sig/generated/riffer/evals/evaluator.rbs
|
|
258
285
|
- sig/generated/riffer/evals/evaluator_runner.rbs
|
|
@@ -275,6 +302,7 @@ files:
|
|
|
275
302
|
- sig/generated/riffer/helpers/deep_dup.rbs
|
|
276
303
|
- sig/generated/riffer/helpers/dependencies.rbs
|
|
277
304
|
- sig/generated/riffer/helpers/identifier.rbs
|
|
305
|
+
- sig/generated/riffer/helpers/validate.rbs
|
|
278
306
|
- sig/generated/riffer/mcp.rbs
|
|
279
307
|
- sig/generated/riffer/mcp/authenticated_tool.rbs
|
|
280
308
|
- sig/generated/riffer/mcp/client.rbs
|
|
@@ -368,6 +396,7 @@ files:
|
|
|
368
396
|
- sig/manual/riffer/helpers/deep_dup.rbs
|
|
369
397
|
- sig/manual/riffer/helpers/dependencies.rbs
|
|
370
398
|
- sig/manual/riffer/helpers/identifier.rbs
|
|
399
|
+
- sig/manual/riffer/helpers/validate.rbs
|
|
371
400
|
- sig/manual/riffer/mcp.rbs
|
|
372
401
|
- sig/manual/riffer/mcp/authenticated_tool.rbs
|
|
373
402
|
- sig/manual/riffer/mcp/registry.rbs
|