riffer 0.29.0 → 0.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.agents/rbs-inline.md +51 -0
- data/.release-please-manifest.json +1 -1
- data/CHANGELOG.md +7 -0
- data/Steepfile +2 -1
- data/lib/riffer/agent/context.rb +2 -0
- data/lib/riffer/agent/response.rb +2 -0
- data/lib/riffer/agent/session.rb +2 -0
- data/lib/riffer/agent.rb +2 -0
- data/lib/riffer/evals/evaluator.rb +5 -0
- data/lib/riffer/evals/judge.rb +5 -0
- data/lib/riffer/mcp/client.rb +2 -0
- data/lib/riffer/mcp/registration.rb +4 -0
- data/lib/riffer/mcp/registry.rb +3 -0
- data/lib/riffer/messages/file_part.rb +2 -0
- data/lib/riffer/providers/amazon_bedrock.rb +28 -21
- data/lib/riffer/providers/anthropic.rb +13 -9
- data/lib/riffer/providers/base.rb +2 -0
- data/lib/riffer/providers/gemini.rb +4 -0
- data/lib/riffer/providers/mock.rb +4 -0
- data/lib/riffer/providers/open_ai.rb +10 -7
- data/lib/riffer/providers/open_router.rb +25 -18
- data/lib/riffer/runner/fibers.rb +2 -0
- data/lib/riffer/runner/threaded.rb +2 -0
- data/lib/riffer/skills/config.rb +5 -0
- data/lib/riffer/skills/context.rb +3 -0
- data/lib/riffer/skills/filesystem_backend.rb +3 -0
- data/lib/riffer/tools/response.rb +2 -0
- data/lib/riffer/tools/runtime.rb +2 -0
- data/lib/riffer/tools/toolable.rb +7 -0
- data/lib/riffer/version.rb +1 -1
- data/lib/riffer.rb +2 -0
- data/sig/_private/anthropic.rbs +16 -0
- data/sig/_private/openai.rbs +29 -0
- data/sig/_private/riffer/providers/amazon_bedrock.rbs +4 -0
- data/sig/_private/riffer/providers/anthropic.rbs +4 -0
- data/sig/_private/riffer/providers/open_ai.rbs +4 -0
- data/sig/_private/riffer/providers/open_router.rbs +4 -0
- data/sig/generated/riffer/agent/context.rbs +2 -0
- data/sig/generated/riffer/agent/response.rbs +2 -0
- data/sig/generated/riffer/agent/session.rbs +2 -0
- data/sig/generated/riffer/agent.rbs +2 -0
- data/sig/generated/riffer/evals/evaluator.rbs +8 -0
- data/sig/generated/riffer/evals/judge.rbs +8 -0
- data/sig/generated/riffer/mcp/client.rbs +2 -0
- data/sig/generated/riffer/mcp/registration.rbs +6 -0
- data/sig/generated/riffer/mcp/registry.rbs +4 -0
- data/sig/generated/riffer/messages/file_part.rbs +2 -0
- data/sig/generated/riffer/providers/amazon_bedrock.rbs +20 -20
- data/sig/generated/riffer/providers/anthropic.rbs +10 -10
- data/sig/generated/riffer/providers/base.rbs +2 -0
- data/sig/generated/riffer/providers/gemini.rbs +6 -0
- data/sig/generated/riffer/providers/mock.rbs +6 -0
- data/sig/generated/riffer/providers/open_ai.rbs +8 -8
- data/sig/generated/riffer/providers/open_router.rbs +16 -16
- data/sig/generated/riffer/runner/fibers.rbs +2 -0
- data/sig/generated/riffer/runner/threaded.rbs +2 -0
- data/sig/generated/riffer/skills/config.rbs +8 -0
- data/sig/generated/riffer/skills/context.rbs +4 -0
- data/sig/generated/riffer/skills/filesystem_backend.rbs +4 -0
- data/sig/generated/riffer/tools/response.rbs +2 -0
- data/sig/generated/riffer/tools/runtime.rbs +2 -0
- data/sig/generated/riffer/tools/toolable.rbs +12 -0
- data/sig/generated/riffer.rbs +2 -0
- data/sig/manifest.yaml +3 -0
- data/sig/manual/riffer/agent/run.rbs +5 -0
- data/sig/manual/riffer/helpers/call_or_value.rbs +5 -0
- data/sig/manual/riffer/tools/toolable.rbs +6 -0
- metadata +16 -11
- data/sig/stubs/agent_ivars.rbs +0 -7
- data/sig/stubs/extend_self.rbs +0 -11
- data/sig/stubs/lib_ivars.rbs +0 -101
- data/sig/stubs/provider_ivars.rbs +0 -36
- data/sig/stubs/provider_sdk_methods.rbs +0 -50
- /data/sig/{stubs → _private}/async.rbs +0 -0
- /data/sig/{stubs → _private}/aws-sdk-core/seahorse_request_context.rbs +0 -0
- /data/sig/{stubs → _private}/aws-sdk-core/static_token_provider.rbs +0 -0
- /data/sig/{stubs/mcp_sdk.rbs → _private/mcp.rbs} +0 -0
- /data/sig/{stubs → _private}/zeitwerk.rbs +0 -0
data/lib/riffer/tools/runtime.rb
CHANGED
|
@@ -15,6 +15,8 @@ require "json"
|
|
|
15
15
|
# results = runtime.execute(tool_calls, tools: tools, context: context)
|
|
16
16
|
#
|
|
17
17
|
class Riffer::Tools::Runtime
|
|
18
|
+
# @rbs @runner: Riffer::Runner
|
|
19
|
+
|
|
18
20
|
# [runner] the concurrency runner to use for batch execution.
|
|
19
21
|
#
|
|
20
22
|
# Subclasses must provide a runner; instantiating Riffer::Tools::Runtime directly
|
|
@@ -23,6 +23,13 @@
|
|
|
23
23
|
# end
|
|
24
24
|
#
|
|
25
25
|
module Riffer::Tools::Toolable
|
|
26
|
+
# @rbs self.@extenders: Array[Module]?
|
|
27
|
+
# @rbs @description: String?
|
|
28
|
+
# @rbs @identifier: String?
|
|
29
|
+
# @rbs @timeout: (Integer | Float)?
|
|
30
|
+
# @rbs @params_builder: Riffer::Params?
|
|
31
|
+
# @rbs @kind: Symbol?
|
|
32
|
+
|
|
26
33
|
DEFAULT_TIMEOUT = 10 #: Integer
|
|
27
34
|
|
|
28
35
|
# Tracks all classes that extend Toolable.
|
data/lib/riffer/version.rb
CHANGED
data/lib/riffer.rb
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Arity patch for the `anthropic` gem (see openai.rbs for the rationale).
|
|
2
|
+
# `Messages#create` is positional at runtime but typed keyword-only in the gem's
|
|
3
|
+
# RBS; `Messages#stream` is omitted from the gem's RBS but present at runtime
|
|
4
|
+
# (returns a MessageStream helper). Loaded only for riffer's own Steep run.
|
|
5
|
+
module Anthropic
|
|
6
|
+
module Resources
|
|
7
|
+
class Messages
|
|
8
|
+
def create: (Hash[Symbol, untyped] params) -> Anthropic::Models::Message
|
|
9
|
+
| (**untyped) -> Anthropic::Models::Message
|
|
10
|
+
| ...
|
|
11
|
+
|
|
12
|
+
def stream: (Hash[Symbol, untyped] params) -> untyped
|
|
13
|
+
| (**untyped) -> untyped
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Arity patch for the `openai` gem. Its Resources methods are positional
|
|
2
|
+
# `def x(params)` at runtime, but the gem's shipped RBS advertises keyword-only
|
|
3
|
+
# signatures. We accept a positional hash or a keyword splat (`| ...` extends the
|
|
4
|
+
# gem's existing overloads). Streaming returns `untyped` — the event objects are a
|
|
5
|
+
# ~60-member union dispatched dynamically on `#type`. Loaded only for riffer's own
|
|
6
|
+
# Steep run (consumers skip sig/_private).
|
|
7
|
+
module OpenAI
|
|
8
|
+
module Resources
|
|
9
|
+
class Responses
|
|
10
|
+
def create: (Hash[Symbol, untyped] params) -> OpenAI::Models::Responses::Response
|
|
11
|
+
| (**untyped) -> OpenAI::Models::Responses::Response
|
|
12
|
+
| ...
|
|
13
|
+
def stream: (Hash[Symbol, untyped] params) -> untyped
|
|
14
|
+
| (**untyped) -> untyped
|
|
15
|
+
| ...
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Chat
|
|
19
|
+
class Completions
|
|
20
|
+
def create: (Hash[Symbol, untyped] params) -> OpenAI::Models::Chat::ChatCompletion
|
|
21
|
+
| (**untyped) -> OpenAI::Models::Chat::ChatCompletion
|
|
22
|
+
| ...
|
|
23
|
+
def stream_raw: (Hash[Symbol, untyped] params) -> untyped
|
|
24
|
+
| (**untyped) -> untyped
|
|
25
|
+
| ...
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
# context.skills # => nil
|
|
18
18
|
# context.token_usage # => nil
|
|
19
19
|
class Riffer::Agent::Context
|
|
20
|
+
@data: Hash[Symbol, untyped]
|
|
21
|
+
|
|
20
22
|
# Keys reserved for framework use. Passing any of these to the
|
|
21
23
|
# constructor raises +Riffer::ArgumentError+.
|
|
22
24
|
RESERVED_KEYS: Array[Symbol]
|
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
# judge_model "anthropic/claude-opus-4-5-20251101"
|
|
15
15
|
# end
|
|
16
16
|
class Riffer::Evals::Evaluator
|
|
17
|
+
self.@instructions: String?
|
|
18
|
+
|
|
19
|
+
self.@higher_is_better: bool?
|
|
20
|
+
|
|
21
|
+
self.@judge_model: String?
|
|
22
|
+
|
|
23
|
+
@judge: Riffer::Evals::Judge?
|
|
24
|
+
|
|
17
25
|
# Gets or sets the evaluation instructions (criteria and scoring rubric).
|
|
18
26
|
#
|
|
19
27
|
# --
|
|
@@ -15,6 +15,14 @@
|
|
|
15
15
|
# result[:score] # => 0.85
|
|
16
16
|
# result[:reason] # => "The response is relevant..."
|
|
17
17
|
class Riffer::Evals::Judge
|
|
18
|
+
@provider_options: Hash[Symbol, untyped]
|
|
19
|
+
|
|
20
|
+
@provider_instance: Riffer::Providers::Base?
|
|
21
|
+
|
|
22
|
+
@provider_name: String?
|
|
23
|
+
|
|
24
|
+
@model_name: String?
|
|
25
|
+
|
|
18
26
|
# Internal tool for structured evaluation output.
|
|
19
27
|
class EvaluationTool < Riffer::Tool
|
|
20
28
|
# --
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
class Riffer::Mcp::Client
|
|
15
15
|
include Riffer::Helpers::Dependencies
|
|
16
16
|
|
|
17
|
+
@client: untyped
|
|
18
|
+
|
|
17
19
|
# --
|
|
18
20
|
# : (endpoint: String, ?headers: (Hash[String, String] | Proc), ?client: untyped?) -> void
|
|
19
21
|
def initialize: (endpoint: String, ?headers: Hash[String, String] | Proc, ?client: untyped?) -> void
|
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
# Created when a server is registered. Discovers tools via the MCP
|
|
6
6
|
# +tools/list+ call, then generates tool classes.
|
|
7
7
|
class Riffer::Mcp::Registration
|
|
8
|
+
@cancelled: bool
|
|
9
|
+
|
|
10
|
+
@tools: Array[singleton(Riffer::Tool)]
|
|
11
|
+
|
|
12
|
+
@mutex: Thread::Mutex
|
|
13
|
+
|
|
8
14
|
# The manifest that describes this server.
|
|
9
15
|
attr_reader manifest: Riffer::Mcp::Manifest
|
|
10
16
|
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
#
|
|
5
5
|
# Keyed by manifest name. All public methods are mutex-guarded.
|
|
6
6
|
module Riffer::Mcp::Registry
|
|
7
|
+
self.@mutex: Thread::Mutex
|
|
8
|
+
|
|
9
|
+
self.@store: Hash[String, Riffer::Mcp::Registration]
|
|
10
|
+
|
|
7
11
|
# Registers an MCP server and starts async tool discovery.
|
|
8
12
|
#
|
|
9
13
|
# Accepts a Manifest instance or a hash of manifest keyword arguments.
|
|
@@ -34,20 +34,20 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
|
34
34
|
def build_request_params: (Array[Riffer::Messages::Base], String?, Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
35
35
|
|
|
36
36
|
# --
|
|
37
|
-
# : (Hash[Symbol, untyped]) ->
|
|
38
|
-
def execute_generate: (Hash[Symbol, untyped]) ->
|
|
37
|
+
# : (Hash[Symbol, untyped]) -> untyped
|
|
38
|
+
def execute_generate: (Hash[Symbol, untyped]) -> untyped
|
|
39
39
|
|
|
40
40
|
# --
|
|
41
|
-
# : (
|
|
42
|
-
def extract_token_usage: (
|
|
41
|
+
# : (untyped) -> Riffer::Providers::TokenUsage?
|
|
42
|
+
def extract_token_usage: (untyped) -> Riffer::Providers::TokenUsage?
|
|
43
43
|
|
|
44
44
|
# --
|
|
45
|
-
# : (
|
|
46
|
-
def extract_content: (
|
|
45
|
+
# : (untyped) -> String
|
|
46
|
+
def extract_content: (untyped) -> String
|
|
47
47
|
|
|
48
48
|
# --
|
|
49
|
-
# : (
|
|
50
|
-
def extract_tool_calls: (
|
|
49
|
+
# : (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
50
|
+
def extract_tool_calls: (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
51
51
|
|
|
52
52
|
# --
|
|
53
53
|
# : (Hash[Symbol, untyped], Enumerator::Yielder) -> void
|
|
@@ -67,28 +67,28 @@ class Riffer::Providers::AmazonBedrock < Riffer::Providers::Base
|
|
|
67
67
|
def raise_if_stream_exception!: (untyped) -> void
|
|
68
68
|
|
|
69
69
|
# --
|
|
70
|
-
# : (
|
|
71
|
-
def handle_content_block_start_tool_use: (
|
|
70
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
71
|
+
def handle_content_block_start_tool_use: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
72
72
|
|
|
73
73
|
# --
|
|
74
|
-
# : (
|
|
75
|
-
def handle_content_block_delta_text_delta: (
|
|
74
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
75
|
+
def handle_content_block_delta_text_delta: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
76
76
|
|
|
77
77
|
# --
|
|
78
|
-
# : (
|
|
79
|
-
def handle_content_block_delta_tool_use: (
|
|
78
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
79
|
+
def handle_content_block_delta_tool_use: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
80
80
|
|
|
81
81
|
# --
|
|
82
|
-
# : (
|
|
83
|
-
def handle_content_block_stop_text_delta: (
|
|
82
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
83
|
+
def handle_content_block_stop_text_delta: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
84
84
|
|
|
85
85
|
# --
|
|
86
|
-
# : (
|
|
87
|
-
def handle_content_block_stop_tool_use: (
|
|
86
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
87
|
+
def handle_content_block_stop_tool_use: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
88
88
|
|
|
89
89
|
# --
|
|
90
|
-
# : (
|
|
91
|
-
def handle_metadata_usage: (
|
|
90
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
91
|
+
def handle_metadata_usage: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
92
92
|
|
|
93
93
|
# --
|
|
94
94
|
# : (Array[Riffer::Messages::Base]) -> Hash[Symbol, untyped]
|
|
@@ -27,20 +27,20 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
|
|
|
27
27
|
def build_request_params: (Array[Riffer::Messages::Base], String?, Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
28
28
|
|
|
29
29
|
# --
|
|
30
|
-
# : (Hash[Symbol, untyped]) ->
|
|
31
|
-
def execute_generate: (Hash[Symbol, untyped]) ->
|
|
30
|
+
# : (Hash[Symbol, untyped]) -> untyped
|
|
31
|
+
def execute_generate: (Hash[Symbol, untyped]) -> untyped
|
|
32
32
|
|
|
33
33
|
# --
|
|
34
|
-
# : (
|
|
35
|
-
def extract_token_usage: (
|
|
34
|
+
# : (untyped) -> Riffer::Providers::TokenUsage?
|
|
35
|
+
def extract_token_usage: (untyped) -> Riffer::Providers::TokenUsage?
|
|
36
36
|
|
|
37
37
|
# --
|
|
38
|
-
# : (
|
|
39
|
-
def extract_content: (
|
|
38
|
+
# : (untyped) -> String
|
|
39
|
+
def extract_content: (untyped) -> String
|
|
40
40
|
|
|
41
41
|
# --
|
|
42
|
-
# : (
|
|
43
|
-
def extract_tool_calls: (
|
|
42
|
+
# : (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
43
|
+
def extract_tool_calls: (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
44
44
|
|
|
45
45
|
# --
|
|
46
46
|
# : (Hash[Symbol, untyped], Enumerator::Yielder) -> void
|
|
@@ -87,8 +87,8 @@ class Riffer::Providers::Anthropic < Riffer::Providers::Base
|
|
|
87
87
|
def handle_content_block_stop_web_search_result: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
88
88
|
|
|
89
89
|
# --
|
|
90
|
-
# : (untyped, accumulated_message:
|
|
91
|
-
def handle_message_stop: (untyped, accumulated_message:
|
|
90
|
+
# : (untyped, accumulated_message: untyped, yielder: Enumerator::Yielder) -> void
|
|
91
|
+
def handle_message_stop: (untyped, accumulated_message: untyped, yielder: Enumerator::Yielder) -> void
|
|
92
92
|
|
|
93
93
|
# --
|
|
94
94
|
# : (Array[Riffer::Messages::Base]) -> Hash[Symbol, untyped]
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
# [extract_content] extract text content from the SDK response
|
|
15
15
|
# [extract_tool_calls] extract tool calls from the SDK response
|
|
16
16
|
class Riffer::Providers::Base
|
|
17
|
+
@current_tools: Array[singleton(Riffer::Tool)]
|
|
18
|
+
|
|
17
19
|
include Riffer::Helpers::Dependencies
|
|
18
20
|
|
|
19
21
|
include Riffer::Messages::Converter
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
# Google Gemini provider for Gemini models via the Gemini REST API.
|
|
4
4
|
class Riffer::Providers::Gemini < Riffer::Providers::Base
|
|
5
|
+
@read_timeout: Integer
|
|
6
|
+
|
|
7
|
+
@open_timeout: Integer
|
|
8
|
+
|
|
9
|
+
@api_key: String?
|
|
10
|
+
|
|
5
11
|
BASE_URI: URI::Generic
|
|
6
12
|
|
|
7
13
|
VALID_MODEL_PATTERN: Regexp
|
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
#
|
|
5
5
|
# No external gems required.
|
|
6
6
|
class Riffer::Providers::Mock < Riffer::Providers::Base
|
|
7
|
+
@stubbed_responses: Array[Hash[Symbol, untyped]]
|
|
8
|
+
|
|
9
|
+
@current_index: Integer
|
|
10
|
+
|
|
11
|
+
@responses: Array[Hash[Symbol, untyped]]
|
|
12
|
+
|
|
7
13
|
# Returns the preferred skill adapter for the given mock model.
|
|
8
14
|
#
|
|
9
15
|
# Mock is used to stand in for any real provider in tests, so the model
|
|
@@ -19,20 +19,20 @@ class Riffer::Providers::OpenAI < Riffer::Providers::Base
|
|
|
19
19
|
def build_request_params: (Array[Riffer::Messages::Base], String?, Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
20
20
|
|
|
21
21
|
# --
|
|
22
|
-
# : (Hash[Symbol, untyped]) ->
|
|
23
|
-
def execute_generate: (Hash[Symbol, untyped]) ->
|
|
22
|
+
# : (Hash[Symbol, untyped]) -> untyped
|
|
23
|
+
def execute_generate: (Hash[Symbol, untyped]) -> untyped
|
|
24
24
|
|
|
25
25
|
# --
|
|
26
|
-
# : (
|
|
27
|
-
def extract_token_usage: (
|
|
26
|
+
# : (untyped) -> Riffer::Providers::TokenUsage?
|
|
27
|
+
def extract_token_usage: (untyped) -> Riffer::Providers::TokenUsage?
|
|
28
28
|
|
|
29
29
|
# --
|
|
30
|
-
# : (
|
|
31
|
-
def extract_content: (
|
|
30
|
+
# : (untyped) -> String
|
|
31
|
+
def extract_content: (untyped) -> String
|
|
32
32
|
|
|
33
33
|
# --
|
|
34
|
-
# : (
|
|
35
|
-
def extract_tool_calls: (
|
|
34
|
+
# : (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
35
|
+
def extract_tool_calls: (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
36
36
|
|
|
37
37
|
# --
|
|
38
38
|
# : (Hash[Symbol, untyped], Enumerator::Yielder) -> void
|
|
@@ -24,48 +24,48 @@ class Riffer::Providers::OpenRouter < Riffer::Providers::Base
|
|
|
24
24
|
def build_request_params: (Array[Riffer::Messages::Base], String?, Hash[Symbol, untyped]) -> Hash[Symbol, untyped]
|
|
25
25
|
|
|
26
26
|
# --
|
|
27
|
-
# : (Hash[Symbol, untyped]) ->
|
|
28
|
-
def execute_generate: (Hash[Symbol, untyped]) ->
|
|
27
|
+
# : (Hash[Symbol, untyped]) -> untyped
|
|
28
|
+
def execute_generate: (Hash[Symbol, untyped]) -> untyped
|
|
29
29
|
|
|
30
30
|
# --
|
|
31
|
-
# : (
|
|
32
|
-
def extract_token_usage: (
|
|
31
|
+
# : (untyped) -> Riffer::Providers::TokenUsage?
|
|
32
|
+
def extract_token_usage: (untyped) -> Riffer::Providers::TokenUsage?
|
|
33
33
|
|
|
34
34
|
# --
|
|
35
|
-
# : (
|
|
36
|
-
def extract_content: (
|
|
35
|
+
# : (untyped) -> String
|
|
36
|
+
def extract_content: (untyped) -> String
|
|
37
37
|
|
|
38
38
|
# --
|
|
39
|
-
# : (
|
|
40
|
-
def extract_tool_calls: (
|
|
39
|
+
# : (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
40
|
+
def extract_tool_calls: (untyped) -> Array[Riffer::Messages::Assistant::ToolCall]
|
|
41
41
|
|
|
42
42
|
# --
|
|
43
43
|
# : (Hash[Symbol, untyped], Enumerator::Yielder) -> void
|
|
44
44
|
def execute_stream: (Hash[Symbol, untyped], Enumerator::Yielder) -> void
|
|
45
45
|
|
|
46
46
|
# --
|
|
47
|
-
# : (
|
|
48
|
-
def handle_stream_chunk: (
|
|
47
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
48
|
+
def handle_stream_chunk: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
49
49
|
|
|
50
50
|
# --
|
|
51
|
-
# : (
|
|
52
|
-
def handle_text_delta: (
|
|
51
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
52
|
+
def handle_text_delta: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
53
53
|
|
|
54
54
|
# --
|
|
55
55
|
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
56
56
|
def handle_reasoning_delta: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
57
57
|
|
|
58
58
|
# --
|
|
59
|
-
# : (
|
|
60
|
-
def handle_tool_call_deltas: (
|
|
59
|
+
# : (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
60
|
+
def handle_tool_call_deltas: (untyped, state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
61
61
|
|
|
62
62
|
# --
|
|
63
63
|
# : (state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
64
64
|
def emit_tool_call_done_events: (state: Hash[Symbol, untyped], yielder: Enumerator::Yielder) -> void
|
|
65
65
|
|
|
66
66
|
# --
|
|
67
|
-
# : (
|
|
68
|
-
def finish_reason_is_tool_calls?: (
|
|
67
|
+
# : (untyped) -> bool
|
|
68
|
+
def finish_reason_is_tool_calls?: (untyped) -> bool
|
|
69
69
|
|
|
70
70
|
# --
|
|
71
71
|
# : (Array[Riffer::Messages::Base]) -> Array[Hash[Symbol, untyped]]
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
# runner = Riffer::Runner::Fibers.new
|
|
13
13
|
# runner.map(items) { |item| expensive_operation(item) }
|
|
14
14
|
class Riffer::Runner::Fibers < Riffer::Runner
|
|
15
|
+
@max_concurrency: Integer?
|
|
16
|
+
|
|
15
17
|
include Riffer::Helpers::Dependencies
|
|
16
18
|
|
|
17
19
|
# [max_concurrency] maximum number of fibers to run simultaneously.
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
# runner = Riffer::Runner::Threaded.new(max_concurrency: 3)
|
|
13
13
|
# runner.map(items) { |item| expensive_operation(item) }
|
|
14
14
|
class Riffer::Runner::Threaded < Riffer::Runner
|
|
15
|
+
@max_concurrency: Integer
|
|
16
|
+
|
|
15
17
|
DEFAULT_MAX_CONCURRENCY: Integer
|
|
16
18
|
|
|
17
19
|
# [max_concurrency] maximum number of threads to run simultaneously.
|
|
@@ -10,6 +10,14 @@
|
|
|
10
10
|
# activate ["code-review"]
|
|
11
11
|
# end
|
|
12
12
|
class Riffer::Skills::Config
|
|
13
|
+
@backend: (Riffer::Skills::Backend | Proc)?
|
|
14
|
+
|
|
15
|
+
@adapter: singleton(Riffer::Skills::Adapter)?
|
|
16
|
+
|
|
17
|
+
@activate: (Array[String] | Proc)?
|
|
18
|
+
|
|
19
|
+
@activate_tool: singleton(Riffer::Tool)?
|
|
20
|
+
|
|
13
21
|
# Creates a new Config with all options unset.
|
|
14
22
|
#
|
|
15
23
|
# --
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
#
|
|
11
11
|
# See Riffer::Skills::Backend, Riffer::Skills::Frontmatter.
|
|
12
12
|
class Riffer::Skills::Context
|
|
13
|
+
@backend: Riffer::Skills::Backend
|
|
14
|
+
|
|
15
|
+
@activated: Hash[String, String]
|
|
16
|
+
|
|
13
17
|
# Skill catalog indexed by name.
|
|
14
18
|
attr_reader skills: Hash[String, Riffer::Skills::Frontmatter]
|
|
15
19
|
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
# backend.list_skills # => [Riffer::Skills::Frontmatter, ...]
|
|
10
10
|
# backend.read_skill("code-review") # => "Full skill instructions..."
|
|
11
11
|
class Riffer::Skills::FilesystemBackend < Riffer::Skills::Backend
|
|
12
|
+
@paths: Array[String]
|
|
13
|
+
|
|
14
|
+
@skills_cache: Hash[String, String]?
|
|
15
|
+
|
|
12
16
|
# Creates a new FilesystemBackend.
|
|
13
17
|
#
|
|
14
18
|
# [paths] one or more directory paths to scan for skills.
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
# runtime = Riffer::Tools::Runtime::Inline.new
|
|
12
12
|
# results = runtime.execute(tool_calls, tools: tools, context: context)
|
|
13
13
|
class Riffer::Tools::Runtime
|
|
14
|
+
@runner: Riffer::Runner
|
|
15
|
+
|
|
14
16
|
# [runner] the concurrency runner to use for batch execution.
|
|
15
17
|
#
|
|
16
18
|
# Subclasses must provide a runner; instantiating Riffer::Tools::Runtime directly
|
|
@@ -21,6 +21,18 @@
|
|
|
21
21
|
# end
|
|
22
22
|
# end
|
|
23
23
|
module Riffer::Tools::Toolable
|
|
24
|
+
@kind: Symbol?
|
|
25
|
+
|
|
26
|
+
@params_builder: Riffer::Params?
|
|
27
|
+
|
|
28
|
+
@timeout: (Integer | Float)?
|
|
29
|
+
|
|
30
|
+
@identifier: String?
|
|
31
|
+
|
|
32
|
+
@description: String?
|
|
33
|
+
|
|
34
|
+
self.@extenders: Array[Module]?
|
|
35
|
+
|
|
24
36
|
DEFAULT_TIMEOUT: Integer
|
|
25
37
|
|
|
26
38
|
# Tracks all classes that extend Toolable.
|
data/sig/generated/riffer.rbs
CHANGED
data/sig/manifest.yaml
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Toolable is extended onto tool classes; its instance methods run as class
|
|
2
|
+
# methods on the extender, which is also extended with ClassNameConverter
|
|
3
|
+
# (see Toolable.extended). The include models that method availability for Steep.
|
|
4
|
+
module Riffer::Tools::Toolable
|
|
5
|
+
include Riffer::Helpers::ClassNameConverter
|
|
6
|
+
end
|