cadenya 0.22.0 → 0.23.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/CHANGELOG.md +9 -0
- data/README.md +13 -1
- data/lib/cadenya/internal/stream.rb +32 -0
- data/lib/cadenya/internal/transport/base_client.rb +1 -1
- data/lib/cadenya/internal/type/base_stream.rb +83 -0
- data/lib/cadenya/models/ai_provider_key_spec.rb +14 -168
- data/lib/cadenya/models/{objective_continue_response.rb → objective_event.rb} +2 -2
- data/lib/cadenya/models/objective_event_webhook_data.rb +3 -43
- data/lib/cadenya/models/objective_stream_events_params.rb +26 -0
- data/lib/cadenya/models/unsafe_unwrap_webhook_event.rb +3 -43
- data/lib/cadenya/models/unwrap_webhook_event.rb +3 -42
- data/lib/cadenya/models.rb +4 -0
- data/lib/cadenya/resources/objectives.rb +31 -4
- data/lib/cadenya/version.rb +1 -1
- data/lib/cadenya.rb +4 -2
- data/rbi/cadenya/internal/stream.rbi +18 -0
- data/rbi/cadenya/internal/transport/base_client.rbi +18 -2
- data/rbi/cadenya/internal/type/base_stream.rbi +75 -0
- data/rbi/cadenya/models/ai_provider_key_spec.rbi +24 -363
- data/rbi/cadenya/models/{objective_continue_response.rbi → objective_event.rbi} +2 -5
- data/rbi/cadenya/models/objective_event_webhook_data.rbi +4 -80
- data/rbi/cadenya/models/objective_stream_events_params.rbi +46 -0
- data/rbi/cadenya/models/unsafe_unwrap_webhook_event.rbi +4 -78
- data/rbi/cadenya/models/unwrap_webhook_event.rbi +4 -77
- data/rbi/cadenya/models.rbi +4 -0
- data/rbi/cadenya/resources/objectives.rbi +17 -6
- data/sig/cadenya/internal/stream.rbs +9 -0
- data/sig/cadenya/internal/type/base_stream.rbs +38 -0
- data/sig/cadenya/models/ai_provider_key_spec.rbs +11 -161
- data/sig/cadenya/models/{objective_continue_response.rbs → objective_event.rbs} +2 -2
- data/sig/cadenya/models/objective_event_webhook_data.rbs +4 -42
- data/sig/cadenya/models/objective_stream_events_params.rbs +28 -0
- data/sig/cadenya/models/unsafe_unwrap_webhook_event.rbs +4 -42
- data/sig/cadenya/models/unwrap_webhook_event.rbs +4 -42
- data/sig/cadenya/models.rbs +4 -0
- data/sig/cadenya/resources/objectives.rbs +8 -2
- metadata +13 -7
- data/lib/cadenya/models/objective_list_events_response.rb +0 -42
- data/rbi/cadenya/models/objective_list_events_response.rbi +0 -72
- data/sig/cadenya/models/objective_list_events_response.rbs +0 -39
|
@@ -222,7 +222,7 @@ module Cadenya
|
|
|
222
222
|
#
|
|
223
223
|
# @param request_options [Cadenya::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
224
224
|
#
|
|
225
|
-
# @return [Cadenya::Models::
|
|
225
|
+
# @return [Cadenya::Models::ObjectiveEvent]
|
|
226
226
|
#
|
|
227
227
|
# @see Cadenya::Models::ObjectiveContinueParams
|
|
228
228
|
def continue(objective_id, params)
|
|
@@ -235,7 +235,7 @@ module Cadenya
|
|
|
235
235
|
method: :post,
|
|
236
236
|
path: ["v1/workspaces/%1$s/objectives/%2$s:continue", workspace_id, objective_id],
|
|
237
237
|
body: parsed,
|
|
238
|
-
model: Cadenya::
|
|
238
|
+
model: Cadenya::ObjectiveEvent,
|
|
239
239
|
options: options
|
|
240
240
|
)
|
|
241
241
|
end
|
|
@@ -299,7 +299,7 @@ module Cadenya
|
|
|
299
299
|
#
|
|
300
300
|
# @param request_options [Cadenya::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
301
301
|
#
|
|
302
|
-
# @return [Cadenya::Internal::CursorPagination<Cadenya::Models::
|
|
302
|
+
# @return [Cadenya::Internal::CursorPagination<Cadenya::Models::ObjectiveEvent>]
|
|
303
303
|
#
|
|
304
304
|
# @see Cadenya::Models::ObjectiveListEventsParams
|
|
305
305
|
def list_events(objective_id, params)
|
|
@@ -319,7 +319,34 @@ module Cadenya
|
|
|
319
319
|
window_id: "windowId"
|
|
320
320
|
),
|
|
321
321
|
page: Cadenya::Internal::CursorPagination,
|
|
322
|
-
model: Cadenya::
|
|
322
|
+
model: Cadenya::ObjectiveEvent,
|
|
323
|
+
options: options
|
|
324
|
+
)
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
# Streams events for an objective in real-time using server-sent events (SSE)
|
|
328
|
+
#
|
|
329
|
+
# @overload stream_events_streaming(objective_id, workspace_id:, request_options: {})
|
|
330
|
+
#
|
|
331
|
+
# @param objective_id [String]
|
|
332
|
+
# @param workspace_id [String]
|
|
333
|
+
# @param request_options [Cadenya::RequestOptions, Hash{Symbol=>Object}, nil]
|
|
334
|
+
#
|
|
335
|
+
# @return [Cadenya::Internal::Stream<Cadenya::Models::ObjectiveEvent>]
|
|
336
|
+
#
|
|
337
|
+
# @see Cadenya::Models::ObjectiveStreamEventsParams
|
|
338
|
+
def stream_events_streaming(objective_id, params)
|
|
339
|
+
parsed, options = Cadenya::ObjectiveStreamEventsParams.dump_request(params)
|
|
340
|
+
workspace_id =
|
|
341
|
+
parsed.delete(:workspace_id) do
|
|
342
|
+
raise ArgumentError.new("missing required path argument #{_1}")
|
|
343
|
+
end
|
|
344
|
+
@client.request(
|
|
345
|
+
method: :get,
|
|
346
|
+
path: ["v1/workspaces/%1$s/objectives/%2$s/events:stream", workspace_id, objective_id],
|
|
347
|
+
headers: {"accept" => "text/event-stream", "accept-encoding" => "identity"},
|
|
348
|
+
stream: Cadenya::Internal::Stream,
|
|
349
|
+
model: Cadenya::ObjectiveEvent,
|
|
323
350
|
options: options
|
|
324
351
|
)
|
|
325
352
|
end
|
data/lib/cadenya/version.rb
CHANGED
data/lib/cadenya.rb
CHANGED
|
@@ -45,6 +45,7 @@ require_relative "cadenya/internal/type/array_of"
|
|
|
45
45
|
require_relative "cadenya/internal/type/hash_of"
|
|
46
46
|
require_relative "cadenya/internal/type/base_model"
|
|
47
47
|
require_relative "cadenya/internal/type/base_page"
|
|
48
|
+
require_relative "cadenya/internal/type/base_stream"
|
|
48
49
|
require_relative "cadenya/internal/type/request_parameters"
|
|
49
50
|
require_relative "cadenya/internal"
|
|
50
51
|
require_relative "cadenya/request_options"
|
|
@@ -53,6 +54,7 @@ require_relative "cadenya/errors"
|
|
|
53
54
|
require_relative "cadenya/internal/transport/base_client"
|
|
54
55
|
require_relative "cadenya/internal/transport/pooled_net_requester"
|
|
55
56
|
require_relative "cadenya/client"
|
|
57
|
+
require_relative "cadenya/internal/stream"
|
|
56
58
|
require_relative "cadenya/internal/cursor_pagination"
|
|
57
59
|
require_relative "cadenya/models/account"
|
|
58
60
|
require_relative "cadenya/models/account_info"
|
|
@@ -177,16 +179,15 @@ require_relative "cadenya/models/objective_config_snapshot"
|
|
|
177
179
|
require_relative "cadenya/models/objective_context_window"
|
|
178
180
|
require_relative "cadenya/models/objective_context_window_data"
|
|
179
181
|
require_relative "cadenya/models/objective_continue_params"
|
|
180
|
-
require_relative "cadenya/models/objective_continue_response"
|
|
181
182
|
require_relative "cadenya/models/objective_create_params"
|
|
182
183
|
require_relative "cadenya/models/objective_error"
|
|
184
|
+
require_relative "cadenya/models/objective_event"
|
|
183
185
|
require_relative "cadenya/models/objective_event_data"
|
|
184
186
|
require_relative "cadenya/models/objective_event_info"
|
|
185
187
|
require_relative "cadenya/models/objective_event_webhook_data"
|
|
186
188
|
require_relative "cadenya/models/objective_info"
|
|
187
189
|
require_relative "cadenya/models/objective_list_context_windows_params"
|
|
188
190
|
require_relative "cadenya/models/objective_list_events_params"
|
|
189
|
-
require_relative "cadenya/models/objective_list_events_response"
|
|
190
191
|
require_relative "cadenya/models/objective_list_params"
|
|
191
192
|
require_relative "cadenya/models/objective_retrieve_params"
|
|
192
193
|
require_relative "cadenya/models/objectives/feedback_create_params"
|
|
@@ -215,6 +216,7 @@ require_relative "cadenya/models/objectives/tool_call_list_params"
|
|
|
215
216
|
require_relative "cadenya/models/objectives/tool_call_retrieve_params"
|
|
216
217
|
require_relative "cadenya/models/objectives/tool_list_params"
|
|
217
218
|
require_relative "cadenya/models/objective_secret"
|
|
219
|
+
require_relative "cadenya/models/objective_stream_events_params"
|
|
218
220
|
require_relative "cadenya/models/operation_metadata"
|
|
219
221
|
require_relative "cadenya/models/page"
|
|
220
222
|
require_relative "cadenya/models/profile"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Cadenya
|
|
4
|
+
module Internal
|
|
5
|
+
class Stream
|
|
6
|
+
Message =
|
|
7
|
+
type_member(:in) { { fixed: Cadenya::Internal::Util::ServerSentEvent } }
|
|
8
|
+
Elem = type_member(:out)
|
|
9
|
+
|
|
10
|
+
include Cadenya::Internal::Type::BaseStream
|
|
11
|
+
|
|
12
|
+
# @api private
|
|
13
|
+
sig { override.returns(T::Enumerable[Elem]) }
|
|
14
|
+
private def iterator
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -49,7 +49,15 @@ module Cadenya
|
|
|
49
49
|
]
|
|
50
50
|
]
|
|
51
51
|
),
|
|
52
|
-
stream:
|
|
52
|
+
stream:
|
|
53
|
+
T.nilable(
|
|
54
|
+
T::Class[
|
|
55
|
+
Cadenya::Internal::Type::BaseStream[
|
|
56
|
+
T.anything,
|
|
57
|
+
Cadenya::Internal::Type::BaseModel
|
|
58
|
+
]
|
|
59
|
+
]
|
|
60
|
+
),
|
|
53
61
|
model: T.nilable(Cadenya::Internal::Type::Converter::Input),
|
|
54
62
|
options: T.nilable(Cadenya::RequestOptions::OrHash)
|
|
55
63
|
}
|
|
@@ -268,7 +276,15 @@ module Cadenya
|
|
|
268
276
|
]
|
|
269
277
|
]
|
|
270
278
|
),
|
|
271
|
-
stream:
|
|
279
|
+
stream:
|
|
280
|
+
T.nilable(
|
|
281
|
+
T::Class[
|
|
282
|
+
Cadenya::Internal::Type::BaseStream[
|
|
283
|
+
T.anything,
|
|
284
|
+
Cadenya::Internal::Type::BaseModel
|
|
285
|
+
]
|
|
286
|
+
]
|
|
287
|
+
),
|
|
272
288
|
model: T.nilable(Cadenya::Internal::Type::Converter::Input),
|
|
273
289
|
options: T.nilable(Cadenya::RequestOptions::OrHash)
|
|
274
290
|
).returns(T.anything)
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
|
|
3
|
+
module Cadenya
|
|
4
|
+
module Internal
|
|
5
|
+
module Type
|
|
6
|
+
# @api private
|
|
7
|
+
#
|
|
8
|
+
# This module provides a base implementation for streaming responses in the SDK.
|
|
9
|
+
module BaseStream
|
|
10
|
+
include Enumerable
|
|
11
|
+
|
|
12
|
+
Message = type_member(:in)
|
|
13
|
+
Elem = type_member(:out)
|
|
14
|
+
|
|
15
|
+
sig { returns(Integer) }
|
|
16
|
+
attr_reader :status
|
|
17
|
+
|
|
18
|
+
sig { returns(T::Hash[String, String]) }
|
|
19
|
+
attr_reader :headers
|
|
20
|
+
|
|
21
|
+
sig { void }
|
|
22
|
+
def close
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @api private
|
|
26
|
+
sig { overridable.returns(T::Enumerable[Elem]) }
|
|
27
|
+
private def iterator
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
sig { params(blk: T.proc.params(arg0: Elem).void).void }
|
|
31
|
+
def each(&blk)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
sig { returns(T::Enumerator[Elem]) }
|
|
35
|
+
def to_enum
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @api private
|
|
39
|
+
sig do
|
|
40
|
+
params(
|
|
41
|
+
model:
|
|
42
|
+
T.any(T::Class[T.anything], Cadenya::Internal::Type::Converter),
|
|
43
|
+
url: URI::Generic,
|
|
44
|
+
status: Integer,
|
|
45
|
+
headers: T::Hash[String, String],
|
|
46
|
+
response: Net::HTTPResponse,
|
|
47
|
+
unwrap:
|
|
48
|
+
T.any(
|
|
49
|
+
Symbol,
|
|
50
|
+
Integer,
|
|
51
|
+
T::Array[T.any(Symbol, Integer)],
|
|
52
|
+
T.proc.params(arg0: T.anything).returns(T.anything)
|
|
53
|
+
),
|
|
54
|
+
stream: T::Enumerable[Message]
|
|
55
|
+
).void
|
|
56
|
+
end
|
|
57
|
+
def initialize(
|
|
58
|
+
model:,
|
|
59
|
+
url:,
|
|
60
|
+
status:,
|
|
61
|
+
headers:,
|
|
62
|
+
response:,
|
|
63
|
+
unwrap:,
|
|
64
|
+
stream:
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @api private
|
|
69
|
+
sig { returns(String) }
|
|
70
|
+
def inspect
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -8,29 +8,22 @@ module Cadenya
|
|
|
8
8
|
T.any(Cadenya::AIProviderKeySpec, Cadenya::Internal::AnyHash)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# a custom endpoint.
|
|
16
|
-
sig { returns(T.nilable(Cadenya::AIProviderKeySpec::Config)) }
|
|
17
|
-
attr_reader :config
|
|
11
|
+
# The provider credential. Accepted on create/update; never populated in responses
|
|
12
|
+
# (the server returns an empty value to avoid leaking it).
|
|
13
|
+
sig { returns(T.nilable(String)) }
|
|
14
|
+
attr_reader :api_key
|
|
18
15
|
|
|
19
|
-
sig { params(
|
|
20
|
-
attr_writer :
|
|
16
|
+
sig { params(api_key: String).void }
|
|
17
|
+
attr_writer :api_key
|
|
21
18
|
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
sig { returns(T.nilable(
|
|
26
|
-
attr_reader :
|
|
19
|
+
# OpenRouterConfig holds OpenRouter-specific settings. Empty for now; it exists as
|
|
20
|
+
# the oneof seam so provider-specific options (region, base URL, etc.) can be
|
|
21
|
+
# added later without restructuring the spec.
|
|
22
|
+
sig { returns(T.nilable(T.anything)) }
|
|
23
|
+
attr_reader :openrouter
|
|
27
24
|
|
|
28
|
-
sig
|
|
29
|
-
|
|
30
|
-
credentials: Cadenya::AIProviderKeySpec::Credentials::OrHash
|
|
31
|
-
).void
|
|
32
|
-
end
|
|
33
|
-
attr_writer :credentials
|
|
25
|
+
sig { params(openrouter: T.anything).void }
|
|
26
|
+
attr_writer :openrouter
|
|
34
27
|
|
|
35
28
|
# The AI provider this key authenticates against.
|
|
36
29
|
sig { returns(T.nilable(Cadenya::AIProviderKeySpec::Provider::OrSymbol)) }
|
|
@@ -43,22 +36,19 @@ module Cadenya
|
|
|
43
36
|
|
|
44
37
|
sig do
|
|
45
38
|
params(
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
api_key: String,
|
|
40
|
+
openrouter: T.anything,
|
|
48
41
|
provider: Cadenya::AIProviderKeySpec::Provider::OrSymbol
|
|
49
42
|
).returns(T.attached_class)
|
|
50
43
|
end
|
|
51
44
|
def self.new(
|
|
52
|
-
#
|
|
53
|
-
#
|
|
54
|
-
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
# provider. The set case must correspond to AIProviderKeySpec.provider. The server
|
|
60
|
-
# encrypts the serialized message at rest and never returns it on reads.
|
|
61
|
-
credentials: nil,
|
|
45
|
+
# The provider credential. Accepted on create/update; never populated in responses
|
|
46
|
+
# (the server returns an empty value to avoid leaking it).
|
|
47
|
+
api_key: nil,
|
|
48
|
+
# OpenRouterConfig holds OpenRouter-specific settings. Empty for now; it exists as
|
|
49
|
+
# the oneof seam so provider-specific options (region, base URL, etc.) can be
|
|
50
|
+
# added later without restructuring the spec.
|
|
51
|
+
openrouter: nil,
|
|
62
52
|
# The AI provider this key authenticates against.
|
|
63
53
|
provider: nil
|
|
64
54
|
)
|
|
@@ -67,8 +57,8 @@ module Cadenya
|
|
|
67
57
|
sig do
|
|
68
58
|
override.returns(
|
|
69
59
|
{
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
api_key: String,
|
|
61
|
+
openrouter: T.anything,
|
|
72
62
|
provider: Cadenya::AIProviderKeySpec::Provider::OrSymbol
|
|
73
63
|
}
|
|
74
64
|
)
|
|
@@ -76,315 +66,6 @@ module Cadenya
|
|
|
76
66
|
def to_hash
|
|
77
67
|
end
|
|
78
68
|
|
|
79
|
-
class Config < Cadenya::Internal::Type::BaseModel
|
|
80
|
-
OrHash =
|
|
81
|
-
T.type_alias do
|
|
82
|
-
T.any(
|
|
83
|
-
Cadenya::AIProviderKeySpec::Config,
|
|
84
|
-
Cadenya::Internal::AnyHash
|
|
85
|
-
)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# OpenAIConfig holds OpenAI-specific settings.
|
|
89
|
-
sig { returns(T.nilable(Cadenya::AIProviderKeySpec::Config::OpenAI)) }
|
|
90
|
-
attr_reader :openai
|
|
91
|
-
|
|
92
|
-
sig do
|
|
93
|
-
params(
|
|
94
|
-
openai: Cadenya::AIProviderKeySpec::Config::OpenAI::OrHash
|
|
95
|
-
).void
|
|
96
|
-
end
|
|
97
|
-
attr_writer :openai
|
|
98
|
-
|
|
99
|
-
# OpenAICompatibleConfig configures a generic endpoint that speaks the OpenAI Chat
|
|
100
|
-
# Completions API. The base URL is required and its model catalog is discovered
|
|
101
|
-
# live via GET {base_url}/models.
|
|
102
|
-
sig do
|
|
103
|
-
returns(
|
|
104
|
-
T.nilable(Cadenya::AIProviderKeySpec::Config::OpenAICompatible)
|
|
105
|
-
)
|
|
106
|
-
end
|
|
107
|
-
attr_reader :openai_compatible
|
|
108
|
-
|
|
109
|
-
sig do
|
|
110
|
-
params(
|
|
111
|
-
openai_compatible:
|
|
112
|
-
Cadenya::AIProviderKeySpec::Config::OpenAICompatible::OrHash
|
|
113
|
-
).void
|
|
114
|
-
end
|
|
115
|
-
attr_writer :openai_compatible
|
|
116
|
-
|
|
117
|
-
# OpenRouterConfig holds OpenRouter-specific settings.
|
|
118
|
-
sig do
|
|
119
|
-
returns(T.nilable(Cadenya::AIProviderKeySpec::Config::Openrouter))
|
|
120
|
-
end
|
|
121
|
-
attr_reader :openrouter
|
|
122
|
-
|
|
123
|
-
sig do
|
|
124
|
-
params(
|
|
125
|
-
openrouter: Cadenya::AIProviderKeySpec::Config::Openrouter::OrHash
|
|
126
|
-
).void
|
|
127
|
-
end
|
|
128
|
-
attr_writer :openrouter
|
|
129
|
-
|
|
130
|
-
# AIProviderConfig holds non-secret, provider-specific settings. The set case must
|
|
131
|
-
# correspond to AIProviderKeySpec.provider. Providers with no settings (Anthropic,
|
|
132
|
-
# Gemini) simply leave this unset. The endpoint of a named provider is fixed and
|
|
133
|
-
# intentionally not overridable here; use the OpenAI-compatible provider to target
|
|
134
|
-
# a custom endpoint.
|
|
135
|
-
sig do
|
|
136
|
-
params(
|
|
137
|
-
openai: Cadenya::AIProviderKeySpec::Config::OpenAI::OrHash,
|
|
138
|
-
openai_compatible:
|
|
139
|
-
Cadenya::AIProviderKeySpec::Config::OpenAICompatible::OrHash,
|
|
140
|
-
openrouter: Cadenya::AIProviderKeySpec::Config::Openrouter::OrHash
|
|
141
|
-
).returns(T.attached_class)
|
|
142
|
-
end
|
|
143
|
-
def self.new(
|
|
144
|
-
# OpenAIConfig holds OpenAI-specific settings.
|
|
145
|
-
openai: nil,
|
|
146
|
-
# OpenAICompatibleConfig configures a generic endpoint that speaks the OpenAI Chat
|
|
147
|
-
# Completions API. The base URL is required and its model catalog is discovered
|
|
148
|
-
# live via GET {base_url}/models.
|
|
149
|
-
openai_compatible: nil,
|
|
150
|
-
# OpenRouterConfig holds OpenRouter-specific settings.
|
|
151
|
-
openrouter: nil
|
|
152
|
-
)
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
sig do
|
|
156
|
-
override.returns(
|
|
157
|
-
{
|
|
158
|
-
openai: Cadenya::AIProviderKeySpec::Config::OpenAI,
|
|
159
|
-
openai_compatible:
|
|
160
|
-
Cadenya::AIProviderKeySpec::Config::OpenAICompatible,
|
|
161
|
-
openrouter: Cadenya::AIProviderKeySpec::Config::Openrouter
|
|
162
|
-
}
|
|
163
|
-
)
|
|
164
|
-
end
|
|
165
|
-
def to_hash
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
class OpenAI < Cadenya::Internal::Type::BaseModel
|
|
169
|
-
OrHash =
|
|
170
|
-
T.type_alias do
|
|
171
|
-
T.any(
|
|
172
|
-
Cadenya::AIProviderKeySpec::Config::OpenAI,
|
|
173
|
-
Cadenya::Internal::AnyHash
|
|
174
|
-
)
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
# Sent as the OpenAI-Organization header when set.
|
|
178
|
-
sig { returns(T.nilable(String)) }
|
|
179
|
-
attr_reader :organization_id
|
|
180
|
-
|
|
181
|
-
sig { params(organization_id: String).void }
|
|
182
|
-
attr_writer :organization_id
|
|
183
|
-
|
|
184
|
-
# Sent as the OpenAI-Project header when set.
|
|
185
|
-
sig { returns(T.nilable(String)) }
|
|
186
|
-
attr_reader :project_id
|
|
187
|
-
|
|
188
|
-
sig { params(project_id: String).void }
|
|
189
|
-
attr_writer :project_id
|
|
190
|
-
|
|
191
|
-
# OpenAIConfig holds OpenAI-specific settings.
|
|
192
|
-
sig do
|
|
193
|
-
params(organization_id: String, project_id: String).returns(
|
|
194
|
-
T.attached_class
|
|
195
|
-
)
|
|
196
|
-
end
|
|
197
|
-
def self.new(
|
|
198
|
-
# Sent as the OpenAI-Organization header when set.
|
|
199
|
-
organization_id: nil,
|
|
200
|
-
# Sent as the OpenAI-Project header when set.
|
|
201
|
-
project_id: nil
|
|
202
|
-
)
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
sig do
|
|
206
|
-
override.returns({ organization_id: String, project_id: String })
|
|
207
|
-
end
|
|
208
|
-
def to_hash
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
class OpenAICompatible < Cadenya::Internal::Type::BaseModel
|
|
213
|
-
OrHash =
|
|
214
|
-
T.type_alias do
|
|
215
|
-
T.any(
|
|
216
|
-
Cadenya::AIProviderKeySpec::Config::OpenAICompatible,
|
|
217
|
-
Cadenya::Internal::AnyHash
|
|
218
|
-
)
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
sig { returns(T.nilable(String)) }
|
|
222
|
-
attr_reader :base_url
|
|
223
|
-
|
|
224
|
-
sig { params(base_url: String).void }
|
|
225
|
-
attr_writer :base_url
|
|
226
|
-
|
|
227
|
-
# OpenAICompatibleConfig configures a generic endpoint that speaks the OpenAI Chat
|
|
228
|
-
# Completions API. The base URL is required and its model catalog is discovered
|
|
229
|
-
# live via GET {base_url}/models.
|
|
230
|
-
sig { params(base_url: String).returns(T.attached_class) }
|
|
231
|
-
def self.new(base_url: nil)
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
sig { override.returns({ base_url: String }) }
|
|
235
|
-
def to_hash
|
|
236
|
-
end
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
class Openrouter < Cadenya::Internal::Type::BaseModel
|
|
240
|
-
OrHash =
|
|
241
|
-
T.type_alias do
|
|
242
|
-
T.any(
|
|
243
|
-
Cadenya::AIProviderKeySpec::Config::Openrouter,
|
|
244
|
-
Cadenya::Internal::AnyHash
|
|
245
|
-
)
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
# Data-residency region (e.g. "us", "eu"). Empty uses the provider default.
|
|
249
|
-
sig { returns(T.nilable(String)) }
|
|
250
|
-
attr_reader :region
|
|
251
|
-
|
|
252
|
-
sig { params(region: String).void }
|
|
253
|
-
attr_writer :region
|
|
254
|
-
|
|
255
|
-
# OpenRouterConfig holds OpenRouter-specific settings.
|
|
256
|
-
sig { params(region: String).returns(T.attached_class) }
|
|
257
|
-
def self.new(
|
|
258
|
-
# Data-residency region (e.g. "us", "eu"). Empty uses the provider default.
|
|
259
|
-
region: nil
|
|
260
|
-
)
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
sig { override.returns({ region: String }) }
|
|
264
|
-
def to_hash
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
class Credentials < Cadenya::Internal::Type::BaseModel
|
|
270
|
-
OrHash =
|
|
271
|
-
T.type_alias do
|
|
272
|
-
T.any(
|
|
273
|
-
Cadenya::AIProviderKeySpec::Credentials,
|
|
274
|
-
Cadenya::Internal::AnyHash
|
|
275
|
-
)
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
# CredentialAPIKey carries a single bearer/header API key.
|
|
279
|
-
sig do
|
|
280
|
-
returns(T.nilable(Cadenya::AIProviderKeySpec::Credentials::APIKey))
|
|
281
|
-
end
|
|
282
|
-
attr_reader :api_key
|
|
283
|
-
|
|
284
|
-
sig do
|
|
285
|
-
params(
|
|
286
|
-
api_key: Cadenya::AIProviderKeySpec::Credentials::APIKey::OrHash
|
|
287
|
-
).void
|
|
288
|
-
end
|
|
289
|
-
attr_writer :api_key
|
|
290
|
-
|
|
291
|
-
# CredentialHeaders carries arbitrary HTTP headers sent with every request to the
|
|
292
|
-
# provider (e.g. {"Authorization": "Bearer ...", "X-Api-Key": "..."}).
|
|
293
|
-
sig do
|
|
294
|
-
returns(T.nilable(Cadenya::AIProviderKeySpec::Credentials::Headers))
|
|
295
|
-
end
|
|
296
|
-
attr_reader :headers
|
|
297
|
-
|
|
298
|
-
sig do
|
|
299
|
-
params(
|
|
300
|
-
headers: Cadenya::AIProviderKeySpec::Credentials::Headers::OrHash
|
|
301
|
-
).void
|
|
302
|
-
end
|
|
303
|
-
attr_writer :headers
|
|
304
|
-
|
|
305
|
-
# AIProviderCredential is the secret material used to authenticate with a
|
|
306
|
-
# provider. The set case must correspond to AIProviderKeySpec.provider. The server
|
|
307
|
-
# encrypts the serialized message at rest and never returns it on reads.
|
|
308
|
-
sig do
|
|
309
|
-
params(
|
|
310
|
-
api_key: Cadenya::AIProviderKeySpec::Credentials::APIKey::OrHash,
|
|
311
|
-
headers: Cadenya::AIProviderKeySpec::Credentials::Headers::OrHash
|
|
312
|
-
).returns(T.attached_class)
|
|
313
|
-
end
|
|
314
|
-
def self.new(
|
|
315
|
-
# CredentialAPIKey carries a single bearer/header API key.
|
|
316
|
-
api_key: nil,
|
|
317
|
-
# CredentialHeaders carries arbitrary HTTP headers sent with every request to the
|
|
318
|
-
# provider (e.g. {"Authorization": "Bearer ...", "X-Api-Key": "..."}).
|
|
319
|
-
headers: nil
|
|
320
|
-
)
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
sig do
|
|
324
|
-
override.returns(
|
|
325
|
-
{
|
|
326
|
-
api_key: Cadenya::AIProviderKeySpec::Credentials::APIKey,
|
|
327
|
-
headers: Cadenya::AIProviderKeySpec::Credentials::Headers
|
|
328
|
-
}
|
|
329
|
-
)
|
|
330
|
-
end
|
|
331
|
-
def to_hash
|
|
332
|
-
end
|
|
333
|
-
|
|
334
|
-
class APIKey < Cadenya::Internal::Type::BaseModel
|
|
335
|
-
OrHash =
|
|
336
|
-
T.type_alias do
|
|
337
|
-
T.any(
|
|
338
|
-
Cadenya::AIProviderKeySpec::Credentials::APIKey,
|
|
339
|
-
Cadenya::Internal::AnyHash
|
|
340
|
-
)
|
|
341
|
-
end
|
|
342
|
-
|
|
343
|
-
sig { returns(T.nilable(String)) }
|
|
344
|
-
attr_reader :api_key
|
|
345
|
-
|
|
346
|
-
sig { params(api_key: String).void }
|
|
347
|
-
attr_writer :api_key
|
|
348
|
-
|
|
349
|
-
# CredentialAPIKey carries a single bearer/header API key.
|
|
350
|
-
sig { params(api_key: String).returns(T.attached_class) }
|
|
351
|
-
def self.new(api_key: nil)
|
|
352
|
-
end
|
|
353
|
-
|
|
354
|
-
sig { override.returns({ api_key: String }) }
|
|
355
|
-
def to_hash
|
|
356
|
-
end
|
|
357
|
-
end
|
|
358
|
-
|
|
359
|
-
class Headers < Cadenya::Internal::Type::BaseModel
|
|
360
|
-
OrHash =
|
|
361
|
-
T.type_alias do
|
|
362
|
-
T.any(
|
|
363
|
-
Cadenya::AIProviderKeySpec::Credentials::Headers,
|
|
364
|
-
Cadenya::Internal::AnyHash
|
|
365
|
-
)
|
|
366
|
-
end
|
|
367
|
-
|
|
368
|
-
sig { returns(T.nilable(T::Hash[Symbol, String])) }
|
|
369
|
-
attr_reader :headers
|
|
370
|
-
|
|
371
|
-
sig { params(headers: T::Hash[Symbol, String]).void }
|
|
372
|
-
attr_writer :headers
|
|
373
|
-
|
|
374
|
-
# CredentialHeaders carries arbitrary HTTP headers sent with every request to the
|
|
375
|
-
# provider (e.g. {"Authorization": "Bearer ...", "X-Api-Key": "..."}).
|
|
376
|
-
sig do
|
|
377
|
-
params(headers: T::Hash[Symbol, String]).returns(T.attached_class)
|
|
378
|
-
end
|
|
379
|
-
def self.new(headers: nil)
|
|
380
|
-
end
|
|
381
|
-
|
|
382
|
-
sig { override.returns({ headers: T::Hash[Symbol, String] }) }
|
|
383
|
-
def to_hash
|
|
384
|
-
end
|
|
385
|
-
end
|
|
386
|
-
end
|
|
387
|
-
|
|
388
69
|
# The AI provider this key authenticates against.
|
|
389
70
|
module Provider
|
|
390
71
|
extend Cadenya::Internal::Type::Enum
|
|
@@ -403,26 +84,6 @@ module Cadenya
|
|
|
403
84
|
:AI_PROVIDER_OPENROUTER,
|
|
404
85
|
Cadenya::AIProviderKeySpec::Provider::TaggedSymbol
|
|
405
86
|
)
|
|
406
|
-
AI_PROVIDER_OPENAI =
|
|
407
|
-
T.let(
|
|
408
|
-
:AI_PROVIDER_OPENAI,
|
|
409
|
-
Cadenya::AIProviderKeySpec::Provider::TaggedSymbol
|
|
410
|
-
)
|
|
411
|
-
AI_PROVIDER_ANTHROPIC =
|
|
412
|
-
T.let(
|
|
413
|
-
:AI_PROVIDER_ANTHROPIC,
|
|
414
|
-
Cadenya::AIProviderKeySpec::Provider::TaggedSymbol
|
|
415
|
-
)
|
|
416
|
-
AI_PROVIDER_GEMINI =
|
|
417
|
-
T.let(
|
|
418
|
-
:AI_PROVIDER_GEMINI,
|
|
419
|
-
Cadenya::AIProviderKeySpec::Provider::TaggedSymbol
|
|
420
|
-
)
|
|
421
|
-
AI_PROVIDER_OPENAI_COMPATIBLE =
|
|
422
|
-
T.let(
|
|
423
|
-
:AI_PROVIDER_OPENAI_COMPATIBLE,
|
|
424
|
-
Cadenya::AIProviderKeySpec::Provider::TaggedSymbol
|
|
425
|
-
)
|
|
426
87
|
|
|
427
88
|
sig do
|
|
428
89
|
override.returns(
|
|
@@ -2,13 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
module Cadenya
|
|
4
4
|
module Models
|
|
5
|
-
class
|
|
5
|
+
class ObjectiveEvent < Cadenya::Internal::Type::BaseModel
|
|
6
6
|
OrHash =
|
|
7
7
|
T.type_alias do
|
|
8
|
-
T.any(
|
|
9
|
-
Cadenya::Models::ObjectiveContinueResponse,
|
|
10
|
-
Cadenya::Internal::AnyHash
|
|
11
|
-
)
|
|
8
|
+
T.any(Cadenya::ObjectiveEvent, Cadenya::Internal::AnyHash)
|
|
12
9
|
end
|
|
13
10
|
|
|
14
11
|
sig { returns(Cadenya::ObjectiveEventData) }
|