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,42 +1,30 @@
|
|
|
1
1
|
# Generated from lib/riffer/messages/base.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Base class for all message types. Subclasses must implement +role+.
|
|
4
3
|
class Riffer::Messages::Base
|
|
5
|
-
# Builds the matching message subclass from a hash, or returns +msg+ unchanged
|
|
6
|
-
# when it is already a message. Raises Riffer::ArgumentError on an invalid message.
|
|
7
4
|
# --
|
|
8
5
|
# : ((Hash[Symbol, untyped] | Riffer::Messages::Base)) -> Riffer::Messages::Base
|
|
9
6
|
def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::Base) -> Riffer::Messages::Base
|
|
10
7
|
|
|
11
|
-
# The message content.
|
|
12
8
|
attr_reader content: String
|
|
13
9
|
|
|
14
|
-
# The message id, or nil when +Riffer.config.message_id_strategy+ is +:none+.
|
|
15
10
|
attr_reader id: String?
|
|
16
11
|
|
|
17
12
|
# --
|
|
18
13
|
# : (String, ?id: String?) -> void
|
|
19
14
|
def initialize: (String, ?id: String?) -> void
|
|
20
15
|
|
|
21
|
-
# Converts the message to a hash.
|
|
22
|
-
#
|
|
23
16
|
# --
|
|
24
17
|
# : () -> Hash[Symbol, untyped]
|
|
25
18
|
def to_h: () -> Hash[Symbol, untyped]
|
|
26
19
|
|
|
27
|
-
# Returns the message role.
|
|
28
20
|
# --
|
|
29
21
|
# : () -> Symbol
|
|
30
22
|
def role: () -> Symbol
|
|
31
23
|
|
|
32
|
-
# Whether this message carries pending tool calls (overridden by
|
|
33
|
-
# +Riffer::Messages::Assistant+).
|
|
34
24
|
# --
|
|
35
25
|
# : () -> bool
|
|
36
26
|
def has_tool_calls?: () -> bool
|
|
37
27
|
|
|
38
|
-
# Merges another same-role message into this one. +Tool+ messages are never
|
|
39
|
-
# merged.
|
|
40
28
|
# --
|
|
41
29
|
# : (untyped) -> Riffer::Messages::Base
|
|
42
30
|
def +: (untyped) -> Riffer::Messages::Base
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/messages/system.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents a system message (instructions) in a conversation.
|
|
4
3
|
class Riffer::Messages::System < Riffer::Messages::Base
|
|
5
|
-
# Builds a System message from a hash, or returns +msg+ unchanged when it is
|
|
6
|
-
# already a System message.
|
|
7
4
|
# --
|
|
8
5
|
# : ((Hash[Symbol, untyped] | Riffer::Messages::System)) -> Riffer::Messages::System
|
|
9
6
|
def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::System) -> Riffer::Messages::System
|
|
@@ -1,32 +1,22 @@
|
|
|
1
1
|
# Generated from lib/riffer/messages/tool.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents a tool execution result in a conversation.
|
|
4
3
|
class Riffer::Messages::Tool < Riffer::Messages::Base
|
|
5
|
-
# Builds a Tool message from a hash, or returns +msg+ unchanged when it is
|
|
6
|
-
# already a Tool message.
|
|
7
4
|
# --
|
|
8
5
|
# : ((Hash[Symbol, untyped] | Riffer::Messages::Tool)) -> Riffer::Messages::Tool
|
|
9
6
|
def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::Tool) -> Riffer::Messages::Tool
|
|
10
7
|
|
|
11
|
-
# The ID of the tool call this result responds to.
|
|
12
8
|
attr_reader tool_call_id: String
|
|
13
9
|
|
|
14
|
-
# The name of the tool that was called.
|
|
15
10
|
attr_reader name: String
|
|
16
11
|
|
|
17
|
-
# The error message if the tool execution failed.
|
|
18
12
|
attr_reader error: String?
|
|
19
13
|
|
|
20
|
-
# The type of error (:unknown_tool, :validation_error, :execution_error,
|
|
21
|
-
# :timeout_error, :unhandled_error).
|
|
22
14
|
attr_reader error_type: Symbol?
|
|
23
15
|
|
|
24
16
|
# --
|
|
25
17
|
# : (String, tool_call_id: String, name: String, ?id: String?, ?error: String?, ?error_type: Symbol?) -> void
|
|
26
18
|
def initialize: (String, tool_call_id: String, name: String, ?id: String?, ?error: String?, ?error_type: Symbol?) -> void
|
|
27
19
|
|
|
28
|
-
# Returns true if the tool execution resulted in an error.
|
|
29
|
-
#
|
|
30
20
|
# --
|
|
31
21
|
# : () -> bool
|
|
32
22
|
def error?: () -> bool
|
|
@@ -35,8 +25,6 @@ class Riffer::Messages::Tool < Riffer::Messages::Base
|
|
|
35
25
|
# : () -> Symbol
|
|
36
26
|
def role: () -> Symbol
|
|
37
27
|
|
|
38
|
-
# Converts the message to a hash.
|
|
39
|
-
#
|
|
40
28
|
# --
|
|
41
29
|
# : () -> Hash[Symbol, untyped]
|
|
42
30
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/messages/user/file_part.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents a file attachment (image or document) — from a URL (+from_url+) or
|
|
4
|
-
# raw base64 data (+new+).
|
|
5
3
|
class Riffer::Messages::User::FilePart
|
|
6
4
|
@data_bytes: String?
|
|
7
5
|
|
|
@@ -17,41 +15,28 @@ class Riffer::Messages::User::FilePart
|
|
|
17
15
|
|
|
18
16
|
SHA256_PATTERN: Regexp
|
|
19
17
|
|
|
20
|
-
# The MIME type of the file.
|
|
21
18
|
attr_reader media_type: String
|
|
22
19
|
|
|
23
|
-
# The filename, if available.
|
|
24
20
|
attr_reader filename: String?
|
|
25
21
|
|
|
26
|
-
# The expected SHA-256 of the file contents, if the caller supplied one.
|
|
27
22
|
attr_reader sha256: String?
|
|
28
23
|
|
|
29
|
-
# Raises Riffer::ArgumentError unless +data+ or +url+ is given and
|
|
30
|
-
# +media_type+ is supported.
|
|
31
24
|
# --
|
|
32
25
|
# : (media_type: String, ?data: String?, ?filename: String?, ?url: String?, ?sha256: String?) -> void
|
|
33
26
|
def initialize: (media_type: String, ?data: String?, ?filename: String?, ?url: String?, ?sha256: String?) -> void
|
|
34
27
|
|
|
35
|
-
# Creates a FilePart from a URL, detecting +media_type+ from the path
|
|
36
|
-
# extension when omitted. Raises Riffer::ArgumentError if it can't be detected.
|
|
37
28
|
# --
|
|
38
29
|
# : (String, ?media_type: String?, ?filename: String?, ?sha256: String?) -> Riffer::Messages::User::FilePart
|
|
39
30
|
def self.from_url: (String, ?media_type: String?, ?filename: String?, ?sha256: String?) -> Riffer::Messages::User::FilePart
|
|
40
31
|
|
|
41
|
-
# Builds a FilePart from a +{url:, media_type:}+ or +{data:, media_type:}+ hash,
|
|
42
|
-
# or returns +file+ unchanged when it is already a FilePart. Raises
|
|
43
|
-
# Riffer::ArgumentError on an invalid hash.
|
|
44
32
|
# --
|
|
45
33
|
# : ((Hash[Symbol, untyped] | Riffer::Messages::User::FilePart)) -> Riffer::Messages::User::FilePart
|
|
46
34
|
def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::User::FilePart) -> Riffer::Messages::User::FilePart
|
|
47
35
|
|
|
48
|
-
# Raises Riffer::ArgumentError when the URL's extension isn't a known media type.
|
|
49
36
|
# --
|
|
50
37
|
# : (String) -> String
|
|
51
38
|
def self.detect_media_type: (String) -> String
|
|
52
39
|
|
|
53
|
-
# The base64-encoded contents - caller-supplied, or filled in by the file
|
|
54
|
-
# resolver after a download. Nil for a URL source riffer hasn't fetched.
|
|
55
40
|
# --
|
|
56
41
|
# : () -> String?
|
|
57
42
|
def data: () -> String?
|
|
@@ -62,44 +47,29 @@ class Riffer::Messages::User::FilePart
|
|
|
62
47
|
# : (String) -> void
|
|
63
48
|
def cache_data_bytes: (String) -> void
|
|
64
49
|
|
|
65
|
-
# Whether data was supplied directly, as opposed to filled in later by the
|
|
66
|
-
# file resolver after a download
|
|
67
50
|
# : () -> bool
|
|
68
51
|
def inline_data?: () -> bool
|
|
69
52
|
|
|
70
|
-
# Caches bytes fetched for a URL source. Deliberately absent from +to_h+:
|
|
71
|
-
# the agent loop re-sends history on every turn, so the cache saves refreshing
|
|
72
|
-
# the same file, while persisted history stays free of megabytes of base64
|
|
73
53
|
# --
|
|
74
54
|
# : (String) -> void
|
|
75
55
|
def cache_downloaded_data: (String) -> void
|
|
76
56
|
|
|
77
|
-
# Returns the URL if the source was a URL, nil otherwise.
|
|
78
|
-
#
|
|
79
57
|
# --
|
|
80
58
|
# : () -> String?
|
|
81
59
|
def url: () -> String?
|
|
82
60
|
|
|
83
|
-
# Returns true if the source was a URL.
|
|
84
|
-
#
|
|
85
61
|
# --
|
|
86
62
|
# : () -> bool
|
|
87
63
|
def url?: () -> bool
|
|
88
64
|
|
|
89
|
-
# Returns true if the file is an image.
|
|
90
|
-
#
|
|
91
65
|
# --
|
|
92
66
|
# : () -> bool
|
|
93
67
|
def image?: () -> bool
|
|
94
68
|
|
|
95
|
-
# Returns true if the file is a document (not an image).
|
|
96
|
-
#
|
|
97
69
|
# --
|
|
98
70
|
# : () -> bool
|
|
99
71
|
def document?: () -> bool
|
|
100
72
|
|
|
101
|
-
# Serializes the FilePart to a hash.
|
|
102
|
-
#
|
|
103
73
|
# --
|
|
104
74
|
# : () -> Hash[Symbol, untyped]
|
|
105
75
|
def to_h: () -> Hash[Symbol, untyped]
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
# Generated from lib/riffer/messages/user.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Represents a user message in a conversation.
|
|
4
3
|
class Riffer::Messages::User < Riffer::Messages::Base
|
|
5
|
-
# Builds a User message from a hash, or returns +msg+ unchanged when it is
|
|
6
|
-
# already a User message. Raises Riffer::ArgumentError on an invalid file.
|
|
7
4
|
# --
|
|
8
5
|
# : ((Hash[Symbol, untyped] | Riffer::Messages::User)) -> Riffer::Messages::User
|
|
9
6
|
def self.from_hash: (Hash[Symbol, untyped] | Riffer::Messages::User) -> Riffer::Messages::User
|
|
10
7
|
|
|
11
|
-
# File attachments for this message.
|
|
12
8
|
attr_reader files: Array[Riffer::Messages::User::FilePart]
|
|
13
9
|
|
|
14
10
|
# --
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/params/boolean.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
# (+true+/+false+ are +TrueClass+/+FalseClass+).
|
|
5
|
-
#
|
|
6
|
-
# required :verbose, Riffer::Params::Boolean
|
|
3
|
+
# Ruby has no +Boolean+ class, so params declare booleans with this sentinel.
|
|
7
4
|
module Riffer::Params::Boolean
|
|
8
5
|
end
|
|
@@ -1,44 +1,28 @@
|
|
|
1
1
|
# Generated from lib/riffer/params/param.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# A single parameter definition, handling type validation and JSON Schema
|
|
4
|
-
# generation.
|
|
5
3
|
class Riffer::Params::Param
|
|
6
|
-
# Maps Ruby types to JSON Schema type strings
|
|
7
4
|
TYPE_MAPPINGS: Hash[Module, String]
|
|
8
5
|
|
|
9
|
-
# Primitive types allowed for the <tt>of:</tt> keyword on Array params
|
|
10
6
|
PRIMITIVE_TYPES: Array[Module]
|
|
11
7
|
|
|
12
|
-
# Maps JSON Schema type strings back to Ruby types (inverse of TYPE_MAPPINGS),
|
|
13
|
-
# collapsing the three boolean spellings onto Riffer::Params::Boolean.
|
|
14
8
|
JSON_TYPE_MAPPINGS: Hash[String, Module]
|
|
15
9
|
|
|
16
|
-
# The parameter name.
|
|
17
10
|
attr_reader name: Symbol
|
|
18
11
|
|
|
19
|
-
# The Ruby type.
|
|
20
12
|
attr_reader type: Module
|
|
21
13
|
|
|
22
|
-
# Whether the parameter is required.
|
|
23
14
|
attr_reader required: bool
|
|
24
15
|
|
|
25
|
-
# The parameter description, if any.
|
|
26
16
|
attr_reader description: String?
|
|
27
17
|
|
|
28
|
-
# Allowed values, if constrained.
|
|
29
18
|
attr_reader enum: Array[untyped]?
|
|
30
19
|
|
|
31
|
-
# The default value, if any.
|
|
32
20
|
attr_reader default: untyped
|
|
33
21
|
|
|
34
|
-
# Element type for a typed array (+of:+).
|
|
35
22
|
attr_reader item_type: Module?
|
|
36
23
|
|
|
37
|
-
# Nested Params for object / array-of-object types.
|
|
38
24
|
attr_reader nested_params: Riffer::Params?
|
|
39
25
|
|
|
40
|
-
# Reconstructs a Param from a single JSON Schema property. Raises
|
|
41
|
-
# Riffer::ArgumentError on a type outside the Params-expressible subset.
|
|
42
26
|
# --
|
|
43
27
|
# : (Symbol, Hash[Symbol, untyped], required: bool) -> Riffer::Params::Param
|
|
44
28
|
def self.from_json_schema: (Symbol, Hash[Symbol, untyped], required: bool) -> Riffer::Params::Param
|
|
@@ -47,9 +31,6 @@ class Riffer::Params::Param
|
|
|
47
31
|
# : (Module, Hash[Symbol, untyped]) -> [Module?, Riffer::Params?]
|
|
48
32
|
def self.resolve_nesting: (Module, Hash[Symbol, untyped]) -> [ Module?, Riffer::Params? ]
|
|
49
33
|
|
|
50
|
-
# Resolves a JSON Schema +type+ (or a <tt>[type, "null"]</tt> union) to its
|
|
51
|
-
# Ruby type. Returns a Module — Riffer::Params::Boolean is a Module, not a
|
|
52
|
-
# Class. Raises Riffer::ArgumentError on an unsupported type.
|
|
53
34
|
# --
|
|
54
35
|
# : (untyped) -> Module
|
|
55
36
|
def self.json_type_to_ruby: (untyped) -> Module
|
|
@@ -58,26 +39,14 @@ class Riffer::Params::Param
|
|
|
58
39
|
# : (name: Symbol, type: Module, required: bool, ?description: String?, ?enum: Array[untyped]?, ?default: untyped, ?item_type: Module?, ?nested_params: Riffer::Params?) -> void
|
|
59
40
|
def initialize: (name: Symbol, type: Module, required: bool, ?description: String?, ?enum: Array[untyped]?, ?default: untyped, ?item_type: Module?, ?nested_params: Riffer::Params?) -> void
|
|
60
41
|
|
|
61
|
-
# Validates that a value matches the expected type.
|
|
62
|
-
#
|
|
63
42
|
# --
|
|
64
43
|
# : (untyped) -> bool
|
|
65
44
|
def valid_type?: (untyped) -> bool
|
|
66
45
|
|
|
67
|
-
# Returns the JSON Schema type name for this parameter.
|
|
68
|
-
#
|
|
69
46
|
# --
|
|
70
47
|
# : () -> String
|
|
71
48
|
def type_name: () -> String
|
|
72
49
|
|
|
73
|
-
# Converts this parameter to JSON Schema format. When +strict+, optional
|
|
74
|
-
# params are made nullable (<tt>["type", "null"]</tt>) so strict providers
|
|
75
|
-
# distinguish absent from present; optional params with an +enum+ use +anyOf+
|
|
76
|
-
# instead, since providers like Anthropic reject
|
|
77
|
-
# <tt>{"type": ["string", "null"], "enum": [...]}</tt>. Raises
|
|
78
|
-
# Riffer::ArgumentError when +strict+ and a Hash param has no block or an
|
|
79
|
-
# Array param has neither a block nor <tt>of:</tt>, since strict providers
|
|
80
|
-
# reject objects without +properties+ and arrays without +items+.
|
|
81
50
|
# --
|
|
82
51
|
# : (?strict: bool) -> Hash[Symbol, untyped]
|
|
83
52
|
def to_json_schema: (?strict: bool) -> Hash[Symbol, untyped]
|
|
@@ -1,69 +1,38 @@
|
|
|
1
1
|
# Generated from lib/riffer/params.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# A DSL for defining tool parameters and structured-output schemas, used within
|
|
4
|
-
# a Tool's +params+ block.
|
|
5
|
-
#
|
|
6
|
-
# params do
|
|
7
|
-
# required :city, String, description: "The city name"
|
|
8
|
-
# optional :units, String, default: "celsius", enum: ["celsius", "fahrenheit"]
|
|
9
|
-
# end
|
|
10
3
|
class Riffer::Params
|
|
11
|
-
# The defined parameters.
|
|
12
4
|
attr_reader parameters: Array[Riffer::Params::Param]
|
|
13
5
|
|
|
14
6
|
# --
|
|
15
7
|
# : () -> void
|
|
16
8
|
def initialize: () -> void
|
|
17
9
|
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
# outside the Params-expressible subset of JSON Schema.
|
|
21
|
-
#
|
|
22
|
-
# schema = params.to_json_schema(strict: false)
|
|
23
|
-
# Riffer::Params.from_json_schema(schema) # => equivalent Riffer::Params
|
|
24
|
-
#
|
|
10
|
+
# The inverse of +to_json_schema(strict: false)+. Raises Riffer::ArgumentError
|
|
11
|
+
# on features outside the Params-expressible subset of JSON Schema.
|
|
25
12
|
# --
|
|
26
13
|
# : (Hash[Symbol, untyped]) -> Riffer::Params
|
|
27
14
|
def self.from_json_schema: (Hash[Symbol, untyped]) -> Riffer::Params
|
|
28
15
|
|
|
29
|
-
# Defines a required parameter.
|
|
30
|
-
#
|
|
31
16
|
# --
|
|
32
17
|
# : (Symbol, Module, ?description: String?, ?enum: Array[untyped]?, ?of: Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> void
|
|
33
18
|
def required: (Symbol, Module, ?description: String?, ?enum: Array[untyped]?, ?of: Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> void
|
|
34
19
|
|
|
35
|
-
# Defines an optional parameter.
|
|
36
|
-
#
|
|
37
20
|
# --
|
|
38
21
|
# : (Symbol, Module, ?description: String?, ?enum: Array[untyped]?, ?default: untyped, ?of: Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> void
|
|
39
22
|
def optional: (Symbol, Module, ?description: String?, ?enum: Array[untyped]?, ?default: untyped, ?of: Module?) ?{ (Riffer::Params) [self: Riffer::Params] -> void } -> void
|
|
40
23
|
|
|
41
|
-
# Validates arguments against parameter definitions.
|
|
42
|
-
#
|
|
43
|
-
# A Float param accepts an Integer (JSON Schema <tt>"number"</tt> covers
|
|
44
|
-
# integers) and its value is coerced with +to_f+, so callers always get a
|
|
45
|
-
# Float. The same holds for the items of an <tt>of: Float</tt> array. No other
|
|
46
|
-
# type is coerced.
|
|
47
|
-
#
|
|
48
|
-
# Raises Riffer::ValidationError if validation fails.
|
|
49
|
-
#
|
|
50
24
|
# --
|
|
51
25
|
# : (Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
52
26
|
def validate: (Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
53
27
|
|
|
54
|
-
# Converts all parameters to JSON Schema format. When +strict+ is true, every
|
|
55
|
-
# property is listed in +required+ and optional ones are made nullable
|
|
56
|
-
# instead, satisfying providers that enforce strict structured output schemas.
|
|
57
|
-
# Raises Riffer::ArgumentError when +strict+ and a Hash param (at any depth)
|
|
58
|
-
# has no block or an Array param has neither a block nor <tt>of:</tt>.
|
|
59
28
|
# --
|
|
60
29
|
# : (?strict: bool) -> Hash[Symbol, untyped]
|
|
61
30
|
def to_json_schema: (?strict: bool) -> Hash[Symbol, untyped]
|
|
62
31
|
|
|
63
32
|
private
|
|
64
33
|
|
|
65
|
-
# +dup+
|
|
66
|
-
#
|
|
34
|
+
# Without this, +dup+ shares parameters, so defining one on either copy
|
|
35
|
+
# would reach the other.
|
|
67
36
|
# --
|
|
68
37
|
# : (Riffer::Params) -> void
|
|
69
38
|
def initialize_copy: (Riffer::Params) -> void
|
|
@@ -84,15 +53,10 @@ class Riffer::Params
|
|
|
84
53
|
# : (Riffer::Params::Param, Array[untyped], Array[String]) -> Array[untyped]
|
|
85
54
|
def validate_nested_array_of_objects: (Riffer::Params::Param, Array[untyped], Array[String]) -> Array[untyped]
|
|
86
55
|
|
|
87
|
-
# Returns the array with its valid items coerced by +coerce_value+.
|
|
88
56
|
# --
|
|
89
57
|
# : (Riffer::Params::Param, Array[untyped], Array[String]) -> Array[untyped]
|
|
90
58
|
def validate_typed_array: (Riffer::Params::Param, Array[untyped], Array[String]) -> Array[untyped]
|
|
91
59
|
|
|
92
|
-
# Coerces an already-validated value to the Ruby type its param declares.
|
|
93
|
-
# Only Float coerces today, because JSON Schema "number" accepts integers and
|
|
94
|
-
# callers should not get a type that depends on whether the model wrote a
|
|
95
|
-
# decimal point. Add a branch here rather than inline at a call site.
|
|
96
60
|
# --
|
|
97
61
|
# : (Module, untyped) -> untyped
|
|
98
62
|
def coerce_value: (Module, untyped) -> untyped
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
# Generated from lib/riffer/providers/amazon_bedrock.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Amazon Bedrock provider for Claude and other foundation models. Requires the
|
|
4
|
-
# +aws-sdk-bedrockruntime+ gem.
|
|
5
3
|
class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
6
|
-
#
|
|
7
|
-
# cross-region (+us.anthropic.claude-...+) ids.
|
|
4
|
+
# Bedrock ids are bare (+anthropic.claude-...+) or cross-region (+us.anthropic.claude-...+).
|
|
8
5
|
ANTHROPIC_MODEL_PATTERN: Regexp
|
|
9
6
|
|
|
10
7
|
FINISH_REASONS: Hash[String, Symbol]
|
|
11
8
|
|
|
12
|
-
#
|
|
13
|
-
#
|
|
9
|
+
# Only parts carrying this tag are replayed, so reasoning captured by another
|
|
10
|
+
# adapter, whose signatures Converse cannot verify, never reaches the request.
|
|
11
|
+
REASONING_FORMAT: String
|
|
12
|
+
|
|
14
13
|
# --
|
|
15
14
|
# : (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
16
15
|
def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
17
16
|
|
|
18
|
-
# The GenAI semconv well-known provider name.
|
|
19
17
|
# --
|
|
20
18
|
# : () -> String
|
|
21
19
|
def self.semconv_provider_name: () -> String
|
|
@@ -34,9 +32,6 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
|
34
32
|
# : () -> untyped
|
|
35
33
|
def global_client: () -> untyped
|
|
36
34
|
|
|
37
|
-
# Compacted so an unset region stays absent: the AWS SDK resolves +AWS_REGION+
|
|
38
|
-
# and the shared config only for a missing argument, and raises
|
|
39
|
-
# +Aws::Errors::MissingRegionError+ on an explicit nil.
|
|
40
35
|
# --
|
|
41
36
|
# : () -> untyped
|
|
42
37
|
def build_client: () -> untyped
|
|
@@ -45,10 +40,6 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
|
45
40
|
# : (Array[Riffer::Messages::Base], String?, Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
46
41
|
def build_request_params: (Array[Riffer::Messages::Base], String?, Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
47
42
|
|
|
48
|
-
# Converse treats +tools -> system -> messages+ as one prefix and looks back
|
|
49
|
-
# from a +cachePoint+ for the longest cached run, so the point on the final
|
|
50
|
-
# message reuses the previous step's cache wherever that point sat. Mixed
|
|
51
|
-
# ttls must be ordered 1h before 5m, so both points share one.
|
|
52
43
|
# --
|
|
53
44
|
# : (Hash[Symbol, untyped], untyped) -> void
|
|
54
45
|
def apply_cache_point: (Hash[Symbol, untyped], untyped) -> void
|
|
@@ -65,8 +56,6 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
|
65
56
|
# : (untyped) -> Riffer::Providers::TokenUsage?
|
|
66
57
|
def extract_token_usage: (untyped) -> Riffer::Providers::TokenUsage?
|
|
67
58
|
|
|
68
|
-
# Converse's +input_tokens+ excludes the cache buckets; TokenUsage's
|
|
69
|
-
# input includes them.
|
|
70
59
|
# --
|
|
71
60
|
# : (untyped) -> Riffer::Providers::TokenUsage
|
|
72
61
|
def build_token_usage: (untyped) -> Riffer::Providers::TokenUsage
|
|
@@ -87,23 +76,24 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
|
87
76
|
# : (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
88
77
|
def extract_tool_calls: (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
89
78
|
|
|
79
|
+
# --
|
|
80
|
+
# : (untyped) -> Array[Riffer::Messages::Assistant::ReasoningPart]
|
|
81
|
+
def extract_reasoning: (untyped) -> Array[Riffer::Messages::Assistant::ReasoningPart]
|
|
82
|
+
|
|
83
|
+
# +redacted_content+ is raw bytes; it is stored Base64-encoded so the part
|
|
84
|
+
# survives JSON persistence.
|
|
85
|
+
# --
|
|
86
|
+
# : (?text: String?, ?signature: String?, ?redacted_content: String?) -> Riffer::Messages::Assistant::ReasoningPart
|
|
87
|
+
def build_reasoning_part: (?text: String?, ?signature: String?, ?redacted_content: String?) -> Riffer::Messages::Assistant::ReasoningPart
|
|
88
|
+
|
|
90
89
|
# --
|
|
91
90
|
# : (Hash[Symbol, untyped], Riffer::Providers::_EventSink) -> void
|
|
92
91
|
def execute_stream: (Hash[Symbol, untyped], Riffer::Providers::_EventSink) -> void
|
|
93
92
|
|
|
94
|
-
# Re-raises an +Aws::Errors::EventError+ event with a message built from its
|
|
95
|
-
# error code and message. The SDK's own +#message+ is just the class name,
|
|
96
|
-
# so without this the failure would be unreadable.
|
|
97
93
|
# --
|
|
98
94
|
# : (untyped) -> void
|
|
99
95
|
def raise_stream_event_error!: (untyped) -> void
|
|
100
96
|
|
|
101
|
-
# Re-raises a Bedrock stream-exception event as the matching
|
|
102
|
-
# +Aws::BedrockRuntime::Errors+ class. ConverseStream delivers API errors on
|
|
103
|
-
# the same channel as content, so without this a mid-stream failure would
|
|
104
|
-
# silently end the stream with no content. Non-exception events that we do
|
|
105
|
-
# not consume (including the SDK's +:unknown_event+ struct) are ignored for
|
|
106
|
-
# forward compatibility.
|
|
107
97
|
# --
|
|
108
98
|
# : (untyped) -> void
|
|
109
99
|
def raise_if_stream_exception!: (untyped) -> void
|
|
@@ -120,6 +110,16 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
|
120
110
|
# : (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
|
|
121
111
|
def handle_content_block_delta_tool_use: (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
|
|
122
112
|
|
|
113
|
+
# A reasoning block streams its text in pieces, then its signature (or its
|
|
114
|
+
# redacted bytes) in a delta of its own.
|
|
115
|
+
# --
|
|
116
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
|
|
117
|
+
def handle_reasoning_delta: (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
|
|
118
|
+
|
|
119
|
+
# --
|
|
120
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
|
|
121
|
+
def handle_reasoning_stop: (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
|
|
122
|
+
|
|
123
123
|
# --
|
|
124
124
|
# : (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
|
|
125
125
|
def handle_content_block_stop_text_delta: (untyped, state: Hash[Symbol, untyped], yielder: Riffer::Providers::_EventSink) -> void
|
|
@@ -140,6 +140,10 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
|
140
140
|
# : (Riffer::Messages::Assistant) -> Hash[Symbol, untyped]
|
|
141
141
|
def convert_assistant_to_bedrock_format: (Riffer::Messages::Assistant) -> Hash[Symbol, untyped]
|
|
142
142
|
|
|
143
|
+
# --
|
|
144
|
+
# : (Riffer::Messages::Assistant::ReasoningPart) -> Hash[Symbol, untyped]
|
|
145
|
+
def convert_reasoning_part_to_bedrock_format: (Riffer::Messages::Assistant::ReasoningPart) -> Hash[Symbol, untyped]
|
|
146
|
+
|
|
143
147
|
# --
|
|
144
148
|
# : (Array[Hash[Symbol, untyped]], Riffer::Messages::Tool) -> void
|
|
145
149
|
def append_tool_result: (Array[Hash[Symbol, untyped]], Riffer::Messages::Tool) -> void
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
# Generated from lib/riffer/providers/anthropic.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Anthropic provider for Claude models via the Anthropic API. Requires the
|
|
4
|
-
# +anthropic+ gem.
|
|
5
3
|
class Riffer::Providers::Anthropic < Riffer::Providers::Base
|
|
6
4
|
WEB_SEARCH_TOOL_TYPE: String
|
|
7
5
|
|
|
8
6
|
FINISH_REASONS: Hash[String, Symbol]
|
|
9
7
|
|
|
10
|
-
# Returns the XML skill adapter for Anthropic/Claude.
|
|
11
|
-
#
|
|
12
8
|
# --
|
|
13
9
|
# : (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
14
10
|
def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
15
11
|
|
|
16
|
-
# The GenAI semconv well-known provider name.
|
|
17
12
|
# --
|
|
18
13
|
# : () -> String
|
|
19
14
|
def self.semconv_provider_name: () -> String
|
|
@@ -28,9 +23,6 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
|
|
|
28
23
|
# : () -> untyped
|
|
29
24
|
def global_client: () -> untyped
|
|
30
25
|
|
|
31
|
-
# Compacted for the same reason as the other providers: never hand an SDK an
|
|
32
|
-
# explicit nil credential, so its own +ANTHROPIC_API_KEY+ resolution stays
|
|
33
|
-
# reachable regardless of how that SDK distinguishes nil from absent.
|
|
34
26
|
# --
|
|
35
27
|
# : () -> untyped
|
|
36
28
|
def build_client: () -> untyped
|
|
@@ -55,8 +47,6 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
|
|
|
55
47
|
# : (untyped) -> Riffer::Providers::FinishReason?
|
|
56
48
|
def build_finish_reason: (untyped) -> Riffer::Providers::FinishReason?
|
|
57
49
|
|
|
58
|
-
# Anthropic's +input_tokens+ excludes the cache buckets; TokenUsage's
|
|
59
|
-
# input includes them.
|
|
60
50
|
# --
|
|
61
51
|
# : (untyped) -> Riffer::Providers::TokenUsage
|
|
62
52
|
def build_token_usage: (untyped) -> Riffer::Providers::TokenUsage
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
# Generated from lib/riffer/providers/azure_open_ai.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Azure OpenAI provider for GPT models hosted on Azure. Requires the +openai+
|
|
4
|
-
# gem. Credentials resolve from config, then +AZURE_OPENAI_API_KEY+ /
|
|
5
|
-
# +AZURE_OPENAI_ENDPOINT+.
|
|
6
3
|
class Riffer::Providers::AzureOpenAI < Riffer::Providers::OpenAI
|
|
7
|
-
# The GenAI semconv well-known provider name.
|
|
8
4
|
# --
|
|
9
5
|
# : () -> String
|
|
10
6
|
def self.semconv_provider_name: () -> String
|
|
@@ -15,10 +11,6 @@ class Riffer::Providers::AzureOpenAI < Riffer::Providers::OpenAI
|
|
|
15
11
|
# : () -> untyped
|
|
16
12
|
def global_client: () -> untyped
|
|
17
13
|
|
|
18
|
-
# Deliberately not compacted: this borrows the OpenAI SDK to talk to Azure, so
|
|
19
|
-
# omitting an unset argument would let the SDK fall back to +OPENAI_API_KEY+
|
|
20
|
-
# and +OPENAI_BASE_URL+ — sending Azure traffic, and an OpenAI credential, to
|
|
21
|
-
# whatever those name. Passing nil raises in the SDK instead.
|
|
22
14
|
# --
|
|
23
15
|
# : () -> untyped
|
|
24
16
|
def build_client: () -> untyped
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/providers/base.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Base class for all LLM providers. A template-method flow: subclasses implement
|
|
4
|
-
# the hooks (+build_request_params+, +execute_generate+, +execute_stream+,
|
|
5
|
-
# +extract_token_usage+, +extract_content+, +extract_tool_calls+) and the base
|
|
6
|
-
# class orchestrates them.
|
|
7
3
|
class Riffer::Providers::Base
|
|
8
4
|
self.@semconv_provider_name: String?
|
|
9
5
|
|
|
@@ -15,28 +11,18 @@ class Riffer::Providers::Base
|
|
|
15
11
|
|
|
16
12
|
WIRE_SEPARATOR: String
|
|
17
13
|
|
|
18
|
-
# Returns the preferred skill adapter for this provider; override in
|
|
19
|
-
# subclasses (optionally introspecting +model+) for provider-specific formats.
|
|
20
14
|
# --
|
|
21
15
|
# : (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
22
16
|
def self.skills_adapter: (?String?) -> singleton(Riffer::Skills::Adapter)
|
|
23
17
|
|
|
24
|
-
# Returns the provider name stamped as <tt>gen_ai.provider.name</tt> on trace
|
|
25
|
-
# spans, ideally a GenAI semconv well-known value. Defaults to the snake_cased
|
|
26
|
-
# class name rather than raising like the abstract provider methods, so
|
|
27
|
-
# enabling tracing never breaks an otherwise-working custom provider.
|
|
28
18
|
# --
|
|
29
19
|
# : () -> String
|
|
30
20
|
def self.semconv_provider_name: () -> String
|
|
31
21
|
|
|
32
|
-
# Generates text using the provider.
|
|
33
|
-
#
|
|
34
22
|
# --
|
|
35
23
|
# : (?prompt: String?, ?system: String?, ?messages: Array[Hash[Symbol, untyped] | Riffer::Messages::Base]?, ?model: String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, **untyped) -> Riffer::Messages::Assistant
|
|
36
24
|
def generate_text: (?prompt: String?, ?system: String?, ?messages: Array[Hash[Symbol, untyped] | Riffer::Messages::Base]?, ?model: String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, **untyped) -> Riffer::Messages::Assistant
|
|
37
25
|
|
|
38
|
-
# Streams text from the provider.
|
|
39
|
-
#
|
|
40
26
|
# --
|
|
41
27
|
# : (?prompt: String?, ?system: String?, ?messages: Array[Hash[Symbol, untyped] | Riffer::Messages::Base]?, ?model: String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, **untyped) -> Enumerator[Riffer::StreamEvents::Base, void]
|
|
42
28
|
def stream_text: (?prompt: String?, ?system: String?, ?messages: Array[Hash[Symbol, untyped] | Riffer::Messages::Base]?, ?model: String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::User::FilePart]?, **untyped) -> Enumerator[Riffer::StreamEvents::Base, void]
|
|
@@ -50,16 +36,10 @@ class Riffer::Providers::Base
|
|
|
50
36
|
# : (String) -> true
|
|
51
37
|
def depends_on: (String) -> true
|
|
52
38
|
|
|
53
|
-
# Returns the client for the current LLM call. A configured client wins,
|
|
54
|
-
# resolved on every call so a Proc can vary the client by process or
|
|
55
|
-
# credential lifetime; otherwise the provider builds one from the configured
|
|
56
|
-
# credentials, memoized for the life of the provider.
|
|
57
39
|
# --
|
|
58
40
|
# : () -> untyped
|
|
59
41
|
def client: () -> untyped
|
|
60
42
|
|
|
61
|
-
# Returns the consumer-configured client for this provider; nil when none is
|
|
62
|
-
# configured, and for providers that take no configuration at all.
|
|
63
43
|
# --
|
|
64
44
|
# : () -> untyped
|
|
65
45
|
def global_client: () -> untyped
|
|
@@ -99,14 +79,10 @@ class Riffer::Providers::Base
|
|
|
99
79
|
# : () -> Riffer::Config::Pricing::Rates?
|
|
100
80
|
def pricing_rates: () -> Riffer::Config::Pricing::Rates?
|
|
101
81
|
|
|
102
|
-
# Defaults to nil rather than raising — finish reasons are optional, so
|
|
103
|
-
# providers that don't report one stay valid.
|
|
104
82
|
# --
|
|
105
83
|
# : (untyped) -> Riffer::Providers::FinishReason?
|
|
106
84
|
def extract_finish_reason: (untyped) -> Riffer::Providers::FinishReason?
|
|
107
85
|
|
|
108
|
-
# Defaults to no parts rather than raising — reasoning parts are optional, so
|
|
109
|
-
# providers that don't expose replayable reasoning stay valid.
|
|
110
86
|
# --
|
|
111
87
|
# : (untyped) -> Array[Riffer::Messages::Assistant::ReasoningPart]
|
|
112
88
|
def extract_reasoning: (untyped) -> Array[Riffer::Messages::Assistant::ReasoningPart]
|
|
@@ -130,8 +106,6 @@ class Riffer::Providers::Base
|
|
|
130
106
|
# : (String?, Hash[Symbol, untyped]) -> Hash[String, untyped]
|
|
131
107
|
def chat_span_attributes: (String?, Hash[Symbol, untyped]) -> Hash[String, untyped]
|
|
132
108
|
|
|
133
|
-
# Maps normalized tags to their namespaced span attribute form. An empty map
|
|
134
|
-
# yields an empty hash, so merging it is a no-op.
|
|
135
109
|
# --
|
|
136
110
|
# : (Hash[String, String]) -> Hash[String, String]
|
|
137
111
|
def tag_attributes: (Hash[String, String]) -> Hash[String, String]
|
|
@@ -156,8 +130,6 @@ class Riffer::Providers::Base
|
|
|
156
130
|
# : ((Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span)) -> bool
|
|
157
131
|
def capture_messages?: (Riffer::Tracing::Otel::Span | Riffer::Tracing::NoOp::Span) -> bool
|
|
158
132
|
|
|
159
|
-
# Wraps reasoning text that an adapter cannot yet replay in a +:text+ part
|
|
160
|
-
# with no +format+, so it persists for display but is never sent back.
|
|
161
133
|
# --
|
|
162
134
|
# : (Riffer::Providers::_EventSink, String) -> void
|
|
163
135
|
def yield_reasoning_done: (Riffer::Providers::_EventSink, String) -> void
|