riffer 0.29.0 → 0.30.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.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.agents/rbs-inline.md +51 -0
  3. data/.release-please-manifest.json +1 -1
  4. data/CHANGELOG.md +18 -0
  5. data/README.md +1 -0
  6. data/Steepfile +2 -1
  7. data/docs/01_OVERVIEW.md +1 -0
  8. data/docs/03_AGENTS.md +1 -1
  9. data/docs/15_SERIALIZATION.md +103 -0
  10. data/lib/riffer/agent/config.rb +2 -2
  11. data/lib/riffer/agent/context.rb +2 -0
  12. data/lib/riffer/agent/response.rb +2 -0
  13. data/lib/riffer/agent/run.rb +2 -1
  14. data/lib/riffer/agent/serializer.rb +215 -0
  15. data/lib/riffer/agent/session.rb +2 -0
  16. data/lib/riffer/agent.rb +84 -18
  17. data/lib/riffer/evals/evaluator.rb +5 -0
  18. data/lib/riffer/evals/judge.rb +5 -0
  19. data/lib/riffer/mcp/client.rb +2 -0
  20. data/lib/riffer/mcp/registration.rb +4 -0
  21. data/lib/riffer/mcp/registry.rb +3 -0
  22. data/lib/riffer/messages/file_part.rb +2 -0
  23. data/lib/riffer/params/param.rb +84 -4
  24. data/lib/riffer/params.rb +34 -3
  25. data/lib/riffer/providers/amazon_bedrock.rb +28 -21
  26. data/lib/riffer/providers/anthropic.rb +13 -9
  27. data/lib/riffer/providers/base.rb +2 -0
  28. data/lib/riffer/providers/gemini.rb +4 -0
  29. data/lib/riffer/providers/mock.rb +4 -0
  30. data/lib/riffer/providers/open_ai.rb +10 -7
  31. data/lib/riffer/providers/open_router.rb +25 -18
  32. data/lib/riffer/runner/fibers.rb +2 -0
  33. data/lib/riffer/runner/threaded.rb +2 -0
  34. data/lib/riffer/skills/config.rb +5 -0
  35. data/lib/riffer/skills/context.rb +3 -0
  36. data/lib/riffer/skills/filesystem_backend.rb +3 -0
  37. data/lib/riffer/tools/response.rb +2 -0
  38. data/lib/riffer/tools/runtime.rb +2 -0
  39. data/lib/riffer/tools/toolable.rb +7 -0
  40. data/lib/riffer/version.rb +1 -1
  41. data/lib/riffer.rb +2 -0
  42. data/sig/_private/anthropic.rbs +16 -0
  43. data/sig/_private/openai.rbs +29 -0
  44. data/sig/_private/riffer/providers/amazon_bedrock.rbs +4 -0
  45. data/sig/_private/riffer/providers/anthropic.rbs +4 -0
  46. data/sig/_private/riffer/providers/open_ai.rbs +4 -0
  47. data/sig/_private/riffer/providers/open_router.rbs +4 -0
  48. data/sig/generated/riffer/agent/config.rbs +3 -3
  49. data/sig/generated/riffer/agent/context.rbs +2 -0
  50. data/sig/generated/riffer/agent/response.rbs +2 -0
  51. data/sig/generated/riffer/agent/serializer.rbs +132 -0
  52. data/sig/generated/riffer/agent/session.rbs +2 -0
  53. data/sig/generated/riffer/agent.rbs +67 -11
  54. data/sig/generated/riffer/evals/evaluator.rbs +8 -0
  55. data/sig/generated/riffer/evals/judge.rbs +8 -0
  56. data/sig/generated/riffer/mcp/client.rbs +2 -0
  57. data/sig/generated/riffer/mcp/registration.rbs +6 -0
  58. data/sig/generated/riffer/mcp/registry.rbs +4 -0
  59. data/sig/generated/riffer/messages/file_part.rbs +2 -0
  60. data/sig/generated/riffer/params/param.rbs +46 -5
  61. data/sig/generated/riffer/params.rbs +25 -6
  62. data/sig/generated/riffer/providers/amazon_bedrock.rbs +20 -20
  63. data/sig/generated/riffer/providers/anthropic.rbs +10 -10
  64. data/sig/generated/riffer/providers/base.rbs +2 -0
  65. data/sig/generated/riffer/providers/gemini.rbs +6 -0
  66. data/sig/generated/riffer/providers/mock.rbs +6 -0
  67. data/sig/generated/riffer/providers/open_ai.rbs +8 -8
  68. data/sig/generated/riffer/providers/open_router.rbs +16 -16
  69. data/sig/generated/riffer/runner/fibers.rbs +2 -0
  70. data/sig/generated/riffer/runner/threaded.rbs +2 -0
  71. data/sig/generated/riffer/skills/config.rbs +8 -0
  72. data/sig/generated/riffer/skills/context.rbs +4 -0
  73. data/sig/generated/riffer/skills/filesystem_backend.rbs +4 -0
  74. data/sig/generated/riffer/tools/response.rbs +2 -0
  75. data/sig/generated/riffer/tools/runtime.rbs +2 -0
  76. data/sig/generated/riffer/tools/toolable.rbs +12 -0
  77. data/sig/generated/riffer.rbs +2 -0
  78. data/sig/manifest.yaml +3 -0
  79. data/sig/manual/riffer/agent/run.rbs +5 -0
  80. data/sig/manual/riffer/agent/serializer.rbs +5 -0
  81. data/sig/manual/riffer/helpers/call_or_value.rbs +5 -0
  82. data/sig/manual/riffer/tools/toolable.rbs +6 -0
  83. metadata +20 -11
  84. data/sig/stubs/agent_ivars.rbs +0 -7
  85. data/sig/stubs/extend_self.rbs +0 -11
  86. data/sig/stubs/lib_ivars.rbs +0 -101
  87. data/sig/stubs/provider_ivars.rbs +0 -36
  88. data/sig/stubs/provider_sdk_methods.rbs +0 -50
  89. /data/sig/{stubs → _private}/async.rbs +0 -0
  90. /data/sig/{stubs → _private}/aws-sdk-core/seahorse_request_context.rbs +0 -0
  91. /data/sig/{stubs → _private}/aws-sdk-core/static_token_provider.rbs +0 -0
  92. /data/sig/{stubs/mcp_sdk.rbs → _private/mcp.rbs} +0 -0
  93. /data/sig/{stubs → _private}/zeitwerk.rbs +0 -0
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.29.0
4
+ version: 0.30.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Bottrall
@@ -277,6 +277,7 @@ files:
277
277
  - docs/12_GUARDRAILS.md
278
278
  - docs/13_SKILLS.md
279
279
  - docs/14_MCP.md
280
+ - docs/15_SERIALIZATION.md
280
281
  - docs/providers/01_PROVIDERS.md
281
282
  - docs/providers/02_AMAZON_BEDROCK.md
282
283
  - docs/providers/03_ANTHROPIC.md
@@ -292,6 +293,7 @@ files:
292
293
  - lib/riffer/agent/context.rb
293
294
  - lib/riffer/agent/response.rb
294
295
  - lib/riffer/agent/run.rb
296
+ - lib/riffer/agent/serializer.rb
295
297
  - lib/riffer/agent/session.rb
296
298
  - lib/riffer/agent/session/repair.rb
297
299
  - lib/riffer/agent/structured_output.rb
@@ -381,12 +383,24 @@ files:
381
383
  - lib/riffer/tools/runtime/threaded.rb
382
384
  - lib/riffer/tools/toolable.rb
383
385
  - lib/riffer/version.rb
386
+ - sig/_private/anthropic.rbs
387
+ - sig/_private/async.rbs
388
+ - sig/_private/aws-sdk-core/seahorse_request_context.rbs
389
+ - sig/_private/aws-sdk-core/static_token_provider.rbs
390
+ - sig/_private/mcp.rbs
391
+ - sig/_private/openai.rbs
392
+ - sig/_private/riffer/providers/amazon_bedrock.rbs
393
+ - sig/_private/riffer/providers/anthropic.rbs
394
+ - sig/_private/riffer/providers/open_ai.rbs
395
+ - sig/_private/riffer/providers/open_router.rbs
396
+ - sig/_private/zeitwerk.rbs
384
397
  - sig/generated/riffer.rbs
385
398
  - sig/generated/riffer/agent.rbs
386
399
  - sig/generated/riffer/agent/config.rbs
387
400
  - sig/generated/riffer/agent/context.rbs
388
401
  - sig/generated/riffer/agent/response.rbs
389
402
  - sig/generated/riffer/agent/run.rbs
403
+ - sig/generated/riffer/agent/serializer.rbs
390
404
  - sig/generated/riffer/agent/session.rbs
391
405
  - sig/generated/riffer/agent/session/repair.rbs
392
406
  - sig/generated/riffer/agent/structured_output.rbs
@@ -476,16 +490,11 @@ files:
476
490
  - sig/generated/riffer/tools/runtime/threaded.rbs
477
491
  - sig/generated/riffer/tools/toolable.rbs
478
492
  - sig/generated/riffer/version.rbs
479
- - sig/stubs/agent_ivars.rbs
480
- - sig/stubs/async.rbs
481
- - sig/stubs/aws-sdk-core/seahorse_request_context.rbs
482
- - sig/stubs/aws-sdk-core/static_token_provider.rbs
483
- - sig/stubs/extend_self.rbs
484
- - sig/stubs/lib_ivars.rbs
485
- - sig/stubs/mcp_sdk.rbs
486
- - sig/stubs/provider_ivars.rbs
487
- - sig/stubs/provider_sdk_methods.rbs
488
- - sig/stubs/zeitwerk.rbs
493
+ - sig/manifest.yaml
494
+ - sig/manual/riffer/agent/run.rbs
495
+ - sig/manual/riffer/agent/serializer.rbs
496
+ - sig/manual/riffer/helpers/call_or_value.rbs
497
+ - sig/manual/riffer/tools/toolable.rbs
489
498
  homepage: https://riffer.ai
490
499
  licenses:
491
500
  - MIT
@@ -1,7 +0,0 @@
1
- # Class-level instance variable declarations for Riffer::Agent.
2
- #
3
- # The `#:` inline syntax used in lib/ can't declare class-level ivars, so we
4
- # stub them here instead.
5
- class Riffer::Agent
6
- self.@config: Riffer::Agent::Config?
7
- end
@@ -1,11 +0,0 @@
1
- # rbs-inline does not emit `extend self` for modules that use it, so their
2
- # instance methods aren't visible as singleton methods. Reopening each module
3
- # here to `extend` itself restores that, matching the runtime behaviour.
4
-
5
- module Riffer::Helpers::CallOrValue
6
- extend ::Riffer::Helpers::CallOrValue
7
- end
8
-
9
- module Riffer::Agent::Run
10
- extend ::Riffer::Agent::Run
11
- end
@@ -1,101 +0,0 @@
1
- # Instance/module variable declarations for non-provider lib/ classes.
2
- #
3
- # rbs-inline's `#:` syntax types an assignment expression (a Steep assertion)
4
- # but doesn't declare the instance variable itself, so we stub the ivar types
5
- # here instead (mirrors sig/stubs/agent_ivars.rbs and provider_ivars.rbs).
6
-
7
- class Riffer::Mcp::Registration
8
- @cancelled: bool
9
- @tools: Array[singleton(Riffer::Tool)]
10
- @mutex: Thread::Mutex
11
- end
12
-
13
- module Riffer::Mcp::Registry
14
- self.@mutex: Thread::Mutex
15
- self.@store: Hash[String, Riffer::Mcp::Registration]
16
- end
17
-
18
- class Riffer::Mcp::Client
19
- @client: untyped
20
- end
21
-
22
- # Toolable is extended onto tool classes; its instance methods run as class
23
- # methods on the extender, which is also extended with ClassNameConverter
24
- # (see Toolable.extended). The include models that method availability for Steep.
25
- module Riffer::Tools::Toolable
26
- include Riffer::Helpers::ClassNameConverter
27
-
28
- self.@extenders: Array[Module]?
29
- @description: String?
30
- @identifier: String?
31
- @timeout: (Integer | Float)?
32
- @params_builder: Riffer::Params?
33
- @kind: Symbol?
34
- end
35
-
36
- class Riffer::Evals::Judge
37
- @provider_options: Hash[Symbol, untyped]
38
- @provider_instance: Riffer::Providers::Base?
39
- @provider_name: String?
40
- @model_name: String?
41
- end
42
-
43
- class Riffer::Evals::Evaluator
44
- self.@instructions: String?
45
- self.@higher_is_better: bool?
46
- self.@judge_model: String?
47
- @judge: Riffer::Evals::Judge?
48
- end
49
-
50
- class Riffer::Skills::Context
51
- @backend: Riffer::Skills::Backend
52
- @activated: Hash[String, String]
53
- end
54
-
55
- class Riffer::Skills::Config
56
- @backend: (Riffer::Skills::Backend | Proc)?
57
- @adapter: singleton(Riffer::Skills::Adapter)?
58
- @activate: (Array[String] | Proc)?
59
- @activate_tool: singleton(Riffer::Tool)?
60
- end
61
-
62
- class Riffer::Skills::FilesystemBackend
63
- @paths: Array[String]
64
- @skills_cache: Hash[String, String]?
65
- end
66
-
67
- module Riffer
68
- self.@config: Riffer::Config?
69
- end
70
-
71
- class Riffer::Agent::Session
72
- @callbacks: Array[^(Riffer::Messages::Base) -> void]
73
- end
74
-
75
- class Riffer::Agent::Context
76
- @data: Hash[Symbol, untyped]
77
- end
78
-
79
- class Riffer::Agent::Response
80
- @interrupted: bool
81
- end
82
-
83
- class Riffer::Tools::Response
84
- @success: bool
85
- end
86
-
87
- class Riffer::Tools::Runtime
88
- @runner: Riffer::Runner
89
- end
90
-
91
- class Riffer::Runner::Threaded
92
- @max_concurrency: Integer
93
- end
94
-
95
- class Riffer::Runner::Fibers
96
- @max_concurrency: Integer?
97
- end
98
-
99
- class Riffer::Messages::FilePart
100
- @url_string: String?
101
- end
@@ -1,36 +0,0 @@
1
- # Instance variable declarations for the provider adapters.
2
- #
3
- # rbs-inline's `#:` syntax types an assignment expression (a Steep assertion)
4
- # but doesn't declare the instance variable itself, so we stub the ivar types
5
- # here instead.
6
- class Riffer::Providers::Base
7
- @current_tools: Array[singleton(Riffer::Tool)]
8
- end
9
-
10
- class Riffer::Providers::Anthropic
11
- @client: ::Anthropic::Client
12
- end
13
-
14
- class Riffer::Providers::OpenAI
15
- @client: ::OpenAI::Client
16
- end
17
-
18
- class Riffer::Providers::OpenRouter
19
- @client: ::OpenAI::Client
20
- end
21
-
22
- class Riffer::Providers::AmazonBedrock
23
- @client: ::Aws::BedrockRuntime::Client
24
- end
25
-
26
- class Riffer::Providers::Gemini
27
- @api_key: String?
28
- @open_timeout: Integer
29
- @read_timeout: Integer
30
- end
31
-
32
- class Riffer::Providers::Mock
33
- @responses: Array[Hash[Symbol, untyped]]
34
- @current_index: Integer
35
- @stubbed_responses: Array[Hash[Symbol, untyped]]
36
- end
@@ -1,50 +0,0 @@
1
- # Accurate signatures for SDK resource methods whose shipped RBS doesn't match
2
- # the real API.
3
- #
4
- # The OpenAI and Anthropic gems implement these as positional `def x(params)`
5
- # methods (a single options hash), but their generated RBS advertises
6
- # keyword-only signatures — and the Anthropic gem omits `Messages#stream`
7
- # altogether. The providers call them with a positional hash (`x(params)`) or a
8
- # keyword splat (`x(**params)`); both reach the same positional parameter at
9
- # runtime, so we accept either here (`| ...` extends the gem's existing
10
- # overloads). Streaming methods are typed to return `untyped`: the event
11
- # objects are a ~60-member union dispatched dynamically on `#type`, which the
12
- # providers (and their `untyped` event handlers) already treat as dynamic.
13
- module OpenAI
14
- module Resources
15
- class Responses
16
- def create: (Hash[Symbol, untyped] params) -> OpenAI::Models::Responses::Response
17
- | (**untyped) -> OpenAI::Models::Responses::Response
18
- | ...
19
- def stream: (Hash[Symbol, untyped] params) -> untyped
20
- | (**untyped) -> untyped
21
- | ...
22
- end
23
-
24
- class Chat
25
- class Completions
26
- def create: (Hash[Symbol, untyped] params) -> OpenAI::Models::Chat::ChatCompletion
27
- | (**untyped) -> OpenAI::Models::Chat::ChatCompletion
28
- | ...
29
- def stream_raw: (Hash[Symbol, untyped] params) -> untyped
30
- | (**untyped) -> untyped
31
- | ...
32
- end
33
- end
34
- end
35
- end
36
-
37
- module Anthropic
38
- module Resources
39
- class Messages
40
- def create: (Hash[Symbol, untyped] params) -> Anthropic::Models::Message
41
- | (**untyped) -> Anthropic::Models::Message
42
- | ...
43
-
44
- # Omitted from the gem's RBS; present at runtime (returns a MessageStream
45
- # helper iterated with `#each` / `#accumulated_message` / `#close`).
46
- def stream: (Hash[Symbol, untyped] params) -> untyped
47
- | (**untyped) -> untyped
48
- end
49
- end
50
- end
File without changes
File without changes
File without changes