boxcars 0.8.10 → 0.9.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/.rubocop.yml +6 -0
- data/.rubocop_todo.yml +339 -0
- data/CHANGELOG.md +79 -0
- data/Gemfile.lock +93 -82
- data/OPENAI_SDK_MIGRATION_PLAN.md +193 -0
- data/README.md +227 -27
- data/Rakefile +98 -0
- data/UPGRADING.md +322 -0
- data/lib/boxcars/boxcar/json_engine_boxcar.rb +239 -2
- data/lib/boxcars/boxcar.rb +145 -0
- data/lib/boxcars/engine/gemini_ai.rb +5 -1
- data/lib/boxcars/engine/groq.rb +5 -1
- data/lib/boxcars/engine/ollama.rb +5 -1
- data/lib/boxcars/engine/openai.rb +26 -15
- data/lib/boxcars/engine/unified_observability.rb +45 -2
- data/lib/boxcars/engine.rb +99 -31
- data/lib/boxcars/engines.rb +72 -2
- data/lib/boxcars/mcp/client.rb +21 -0
- data/lib/boxcars/mcp/stdio_client.rb +253 -0
- data/lib/boxcars/mcp/tool_boxcar.rb +175 -0
- data/lib/boxcars/mcp/tool_registry.rb +37 -0
- data/lib/boxcars/mcp.rb +53 -0
- data/lib/boxcars/openai_client_adapter.rb +178 -0
- data/lib/boxcars/openai_compatible_client.rb +268 -0
- data/lib/boxcars/train/tool_calling_train.rb +379 -0
- data/lib/boxcars/train.rb +1 -0
- data/lib/boxcars/vector_store/embed_via_open_ai.rb +8 -2
- data/lib/boxcars/version.rb +1 -1
- data/lib/boxcars.rb +60 -1
- data/script/notebooks_live_check.rb +81 -0
- metadata +14 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3af5c66747ad41395ee4f9f39f8e76288811162b88eb419183b9e58371985820
|
|
4
|
+
data.tar.gz: 7a762ffdfd83477e035b6a40e4868b931bf94fb2711e07dd95248b567154de03
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 196198a1a7308b1ac20c074190dc7a2cbac0742e16a489c55e1c182d803f71c4ca47f0189cf6cef50f5b361021533a041471247d360a446f36589a6f51743804
|
|
7
|
+
data.tar.gz: ee1f206890e45632964c9f04f1d0c91ef75bead546c7fbe0c644f2455e936ef69ed9f85651bbef567cac883f95352c9210f1fbb5f26ee0485178d565f755ae81
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
# This configuration was generated by
|
|
2
|
+
# `rubocop --auto-gen-config`
|
|
3
|
+
# on 2026-02-27 02:41:57 UTC using RuboCop version 1.85.0.
|
|
4
|
+
# The point is for the user to remove these configuration records
|
|
5
|
+
# one by one as the offenses are removed from the code base.
|
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
|
8
|
+
|
|
9
|
+
# Offense count: 1
|
|
10
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
11
|
+
Layout/EmptyLineAfterGuardClause:
|
|
12
|
+
Exclude:
|
|
13
|
+
- 'lib/boxcars/mcp/stdio_client.rb'
|
|
14
|
+
|
|
15
|
+
# Offense count: 1
|
|
16
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
17
|
+
# Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
|
|
18
|
+
Layout/ExtraSpacing:
|
|
19
|
+
Exclude:
|
|
20
|
+
- 'lib/boxcars/engine/openai.rb'
|
|
21
|
+
|
|
22
|
+
# Offense count: 9
|
|
23
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
24
|
+
# Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings.
|
|
25
|
+
# URISchemes: http, https
|
|
26
|
+
Layout/LineLength:
|
|
27
|
+
Exclude:
|
|
28
|
+
- 'db/**/*'
|
|
29
|
+
- 'spec/**/*'
|
|
30
|
+
- 'lib/boxcars/engines.rb'
|
|
31
|
+
- 'lib/boxcars/mcp.rb'
|
|
32
|
+
- 'lib/boxcars/mcp/stdio_client.rb'
|
|
33
|
+
- 'lib/boxcars/mcp/tool_boxcar.rb'
|
|
34
|
+
- 'lib/boxcars/openai_client_adapter.rb'
|
|
35
|
+
- 'lib/boxcars/openai_compatible_client.rb'
|
|
36
|
+
- 'lib/boxcars/train/tool_calling_train.rb'
|
|
37
|
+
|
|
38
|
+
# Offense count: 1
|
|
39
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
40
|
+
# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator, EnforcedStyleForRationalLiterals.
|
|
41
|
+
# SupportedStylesForExponentOperator: space, no_space
|
|
42
|
+
# SupportedStylesForRationalLiterals: space, no_space
|
|
43
|
+
Layout/SpaceAroundOperators:
|
|
44
|
+
Exclude:
|
|
45
|
+
- 'lib/boxcars/engine/openai.rb'
|
|
46
|
+
|
|
47
|
+
# Offense count: 9
|
|
48
|
+
# Configuration parameters: AllowedMethods.
|
|
49
|
+
# AllowedMethods: enums
|
|
50
|
+
Lint/ConstantDefinitionInBlock:
|
|
51
|
+
Exclude:
|
|
52
|
+
- 'Rakefile'
|
|
53
|
+
- 'spec/notebooks/notebook_examples_spec.rb'
|
|
54
|
+
|
|
55
|
+
# Offense count: 2
|
|
56
|
+
# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches, IgnoreDuplicateElseBranch.
|
|
57
|
+
Lint/DuplicateBranch:
|
|
58
|
+
Exclude:
|
|
59
|
+
- 'lib/boxcars/mcp/tool_boxcar.rb'
|
|
60
|
+
- 'lib/boxcars/openai_client_adapter.rb'
|
|
61
|
+
|
|
62
|
+
# Offense count: 1
|
|
63
|
+
Lint/HashCompareByIdentity:
|
|
64
|
+
Exclude:
|
|
65
|
+
- 'lib/boxcars/mcp.rb'
|
|
66
|
+
|
|
67
|
+
# Offense count: 3
|
|
68
|
+
# Configuration parameters: AllowedParentClasses.
|
|
69
|
+
Lint/MissingSuper:
|
|
70
|
+
Exclude:
|
|
71
|
+
- 'lib/boxcars/mcp/stdio_client.rb'
|
|
72
|
+
- 'spec/boxcars/mcp_helpers_spec.rb'
|
|
73
|
+
- 'spec/boxcars/mcp_tool_boxcar_spec.rb'
|
|
74
|
+
|
|
75
|
+
# Offense count: 1
|
|
76
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
77
|
+
Lint/ScriptPermission:
|
|
78
|
+
Exclude:
|
|
79
|
+
- 'script/notebooks_live_check.rb'
|
|
80
|
+
|
|
81
|
+
# Offense count: 1
|
|
82
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
83
|
+
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods, NotImplementedExceptions.
|
|
84
|
+
# NotImplementedExceptions: NotImplementedError
|
|
85
|
+
Lint/UnusedMethodArgument:
|
|
86
|
+
Exclude:
|
|
87
|
+
- 'lib/boxcars/train/tool_calling_train.rb'
|
|
88
|
+
|
|
89
|
+
# Offense count: 2
|
|
90
|
+
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
|
|
91
|
+
# AllowedMethods: refine
|
|
92
|
+
Metrics/BlockLength:
|
|
93
|
+
Max: 81
|
|
94
|
+
|
|
95
|
+
# Offense count: 3
|
|
96
|
+
# Configuration parameters: CountComments, Max, CountAsOne.
|
|
97
|
+
Metrics/ClassLength:
|
|
98
|
+
Exclude:
|
|
99
|
+
- 'lib/boxcars/boxcar.rb'
|
|
100
|
+
- 'lib/boxcars/boxcar/json_engine_boxcar.rb'
|
|
101
|
+
- 'lib/boxcars/train/tool_calling_train.rb'
|
|
102
|
+
|
|
103
|
+
# Offense count: 2
|
|
104
|
+
# Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns.
|
|
105
|
+
Metrics/MethodLength:
|
|
106
|
+
Exclude:
|
|
107
|
+
- 'spec/**/*'
|
|
108
|
+
- 'lib/boxcars/engines.rb'
|
|
109
|
+
- 'lib/boxcars/train/tool_calling_train.rb'
|
|
110
|
+
|
|
111
|
+
# Offense count: 1
|
|
112
|
+
# Configuration parameters: CountComments, CountAsOne.
|
|
113
|
+
Metrics/ModuleLength:
|
|
114
|
+
Max: 214
|
|
115
|
+
|
|
116
|
+
# Offense count: 2
|
|
117
|
+
# Configuration parameters: Max, CountKeywordArgs, MaxOptionalParameters.
|
|
118
|
+
Metrics/ParameterLists:
|
|
119
|
+
Exclude:
|
|
120
|
+
- 'lib/boxcars/boxcar/json_engine_boxcar.rb'
|
|
121
|
+
- 'lib/boxcars/mcp/stdio_client.rb'
|
|
122
|
+
|
|
123
|
+
# Offense count: 2
|
|
124
|
+
# Configuration parameters: AllowedMethods, AllowedPatterns, Max.
|
|
125
|
+
Metrics/PerceivedComplexity:
|
|
126
|
+
Exclude:
|
|
127
|
+
- 'lib/boxcars/boxcar/json_engine_boxcar.rb'
|
|
128
|
+
- 'lib/boxcars/train/tool_calling_train.rb'
|
|
129
|
+
|
|
130
|
+
# Offense count: 2
|
|
131
|
+
# Configuration parameters: Mode, AllowedMethods, AllowedPatterns, AllowBangMethods, WaywardPredicates.
|
|
132
|
+
# AllowedMethods: call
|
|
133
|
+
# WaywardPredicates: infinite?, nonzero?
|
|
134
|
+
Naming/PredicateMethod:
|
|
135
|
+
Exclude:
|
|
136
|
+
- 'lib/boxcars.rb'
|
|
137
|
+
- 'lib/boxcars/openai_compatible_client.rb'
|
|
138
|
+
|
|
139
|
+
# Offense count: 5
|
|
140
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
141
|
+
RSpec/BeEq:
|
|
142
|
+
Exclude:
|
|
143
|
+
- 'spec/boxcars/openai_compatible_client_spec.rb'
|
|
144
|
+
- 'spec/boxcars/openai_official_backend_spec.rb'
|
|
145
|
+
|
|
146
|
+
# Offense count: 4
|
|
147
|
+
# Configuration parameters: IgnoredMetadata.
|
|
148
|
+
RSpec/DescribeClass:
|
|
149
|
+
Exclude:
|
|
150
|
+
- '**/spec/features/**/*'
|
|
151
|
+
- '**/spec/requests/**/*'
|
|
152
|
+
- '**/spec/routing/**/*'
|
|
153
|
+
- '**/spec/system/**/*'
|
|
154
|
+
- '**/spec/views/**/*'
|
|
155
|
+
- 'spec/boxcars/engine/capabilities_spec.rb'
|
|
156
|
+
- 'spec/boxcars/openai_compatible_provider_backend_pinning_spec.rb'
|
|
157
|
+
- 'spec/boxcars/openai_official_backend_spec.rb'
|
|
158
|
+
- 'spec/notebooks/notebook_examples_spec.rb'
|
|
159
|
+
|
|
160
|
+
# Offense count: 4
|
|
161
|
+
RSpec/ExpectInHook:
|
|
162
|
+
Exclude:
|
|
163
|
+
- 'spec/boxcars/openai_official_backend_spec.rb'
|
|
164
|
+
|
|
165
|
+
# Offense count: 4
|
|
166
|
+
RSpec/LeakyConstantDeclaration:
|
|
167
|
+
Exclude:
|
|
168
|
+
- 'spec/notebooks/notebook_examples_spec.rb'
|
|
169
|
+
|
|
170
|
+
# Offense count: 11
|
|
171
|
+
RSpec/LeakyLocalVariable:
|
|
172
|
+
Exclude:
|
|
173
|
+
- 'spec/boxcars/active_record_spec.rb'
|
|
174
|
+
- 'spec/boxcars/json_engine_boxcar_spec.rb'
|
|
175
|
+
- 'spec/boxcars/posthog_backend_spec.rb'
|
|
176
|
+
- 'spec/boxcars/ruby_repl_spec.rb'
|
|
177
|
+
- 'spec/boxcars/sql_active_record_spec.rb'
|
|
178
|
+
|
|
179
|
+
# Offense count: 25
|
|
180
|
+
# Configuration parameters: EnforcedStyle.
|
|
181
|
+
# SupportedStyles: have_received, receive
|
|
182
|
+
RSpec/MessageSpies:
|
|
183
|
+
Exclude:
|
|
184
|
+
- 'spec/boxcars/engines_spec.rb'
|
|
185
|
+
- 'spec/boxcars/openai_backend_override_spec.rb'
|
|
186
|
+
- 'spec/boxcars/openai_client_adapter_spec.rb'
|
|
187
|
+
- 'spec/boxcars/openai_compatible_client_spec.rb'
|
|
188
|
+
- 'spec/boxcars/openai_compatible_provider_backend_pinning_spec.rb'
|
|
189
|
+
- 'spec/boxcars/openai_official_backend_spec.rb'
|
|
190
|
+
|
|
191
|
+
# Offense count: 1
|
|
192
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
193
|
+
RSpec/Output:
|
|
194
|
+
Exclude:
|
|
195
|
+
- 'spec/boxcars/openai_spec.rb'
|
|
196
|
+
|
|
197
|
+
# Offense count: 2
|
|
198
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
199
|
+
RSpec/ReceiveMessages:
|
|
200
|
+
Exclude:
|
|
201
|
+
- 'spec/boxcars/openai_compatible_client_spec.rb'
|
|
202
|
+
|
|
203
|
+
# Offense count: 3
|
|
204
|
+
# Configuration parameters: CustomTransform, IgnoreMethods, IgnoreMetadata, InflectorPath, EnforcedInflector.
|
|
205
|
+
# SupportedInflectors: default, active_support
|
|
206
|
+
RSpec/SpecFilePathFormat:
|
|
207
|
+
Exclude:
|
|
208
|
+
- '**/spec/routing/**/*'
|
|
209
|
+
- 'spec/boxcars/mcp_stdio_client_spec.rb'
|
|
210
|
+
- 'spec/boxcars/openai_client_adapter_spec.rb'
|
|
211
|
+
- 'spec/boxcars/openai_compatible_client_spec.rb'
|
|
212
|
+
|
|
213
|
+
# Offense count: 18
|
|
214
|
+
RSpec/StubbedMock:
|
|
215
|
+
Exclude:
|
|
216
|
+
- 'spec/boxcars/openai_backend_override_spec.rb'
|
|
217
|
+
- 'spec/boxcars/openai_client_adapter_spec.rb'
|
|
218
|
+
- 'spec/boxcars/openai_compatible_client_spec.rb'
|
|
219
|
+
- 'spec/boxcars/openai_official_backend_spec.rb'
|
|
220
|
+
|
|
221
|
+
# Offense count: 6
|
|
222
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
223
|
+
# Configuration parameters: AllowOnlyRestArgument, UseAnonymousForwarding, RedundantRestArgumentNames, RedundantKeywordRestArgumentNames, RedundantBlockArgumentNames.
|
|
224
|
+
# RedundantRestArgumentNames: args, arguments
|
|
225
|
+
# RedundantKeywordRestArgumentNames: kwargs, options, opts
|
|
226
|
+
# RedundantBlockArgumentNames: blk, block, proc
|
|
227
|
+
Style/ArgumentsForwarding:
|
|
228
|
+
Exclude:
|
|
229
|
+
- 'lib/boxcars/mcp.rb'
|
|
230
|
+
- 'lib/boxcars/mcp/tool_registry.rb'
|
|
231
|
+
|
|
232
|
+
# Offense count: 1
|
|
233
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
234
|
+
# Configuration parameters: EnforcedStyle.
|
|
235
|
+
# SupportedStyles: class_keyword, class_new, class_definition
|
|
236
|
+
Style/EmptyClassDefinition:
|
|
237
|
+
Exclude:
|
|
238
|
+
- 'lib/boxcars/vector_store.rb'
|
|
239
|
+
|
|
240
|
+
# Offense count: 1
|
|
241
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
242
|
+
# Configuration parameters: EnforcedStyle.
|
|
243
|
+
# SupportedStyles: trailing_conditional, ternary
|
|
244
|
+
Style/EmptyStringInsideInterpolation:
|
|
245
|
+
Exclude:
|
|
246
|
+
- 'lib/boxcars/mcp/stdio_client.rb'
|
|
247
|
+
|
|
248
|
+
# Offense count: 1
|
|
249
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
250
|
+
Style/ExplicitBlockArgument:
|
|
251
|
+
Exclude:
|
|
252
|
+
- 'lib/boxcars/mcp/stdio_client.rb'
|
|
253
|
+
|
|
254
|
+
# Offense count: 1
|
|
255
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
256
|
+
# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.
|
|
257
|
+
Style/GuardClause:
|
|
258
|
+
Exclude:
|
|
259
|
+
- 'lib/boxcars/train/tool_calling_train.rb'
|
|
260
|
+
|
|
261
|
+
# Offense count: 7
|
|
262
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
263
|
+
Style/IfUnlessModifier:
|
|
264
|
+
Exclude:
|
|
265
|
+
- 'Rakefile'
|
|
266
|
+
- 'lib/boxcars/boxcar/json_engine_boxcar.rb'
|
|
267
|
+
- 'lib/boxcars/engines.rb'
|
|
268
|
+
- 'lib/boxcars/mcp/stdio_client.rb'
|
|
269
|
+
- 'lib/boxcars/openai_client_adapter.rb'
|
|
270
|
+
- 'lib/boxcars/train/tool_calling_train.rb'
|
|
271
|
+
|
|
272
|
+
# Offense count: 2
|
|
273
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
274
|
+
# Configuration parameters: AllowMethodComparison, ComparisonsThreshold.
|
|
275
|
+
Style/MultipleComparison:
|
|
276
|
+
Exclude:
|
|
277
|
+
- 'lib/boxcars.rb'
|
|
278
|
+
- 'lib/boxcars/boxcar/json_engine_boxcar.rb'
|
|
279
|
+
|
|
280
|
+
# Offense count: 10
|
|
281
|
+
# Configuration parameters: AllowedClasses.
|
|
282
|
+
Style/OneClassPerFile:
|
|
283
|
+
Exclude:
|
|
284
|
+
- 'example.rb'
|
|
285
|
+
- 'notebooks/helpdesk_sample.rb'
|
|
286
|
+
- 'spec/boxcars/engine/intelligence_base_observability_spec.rb'
|
|
287
|
+
- 'spec/support/helpdesk_sample_app.rb'
|
|
288
|
+
|
|
289
|
+
# Offense count: 4
|
|
290
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
291
|
+
Style/PredicateWithKind:
|
|
292
|
+
Exclude:
|
|
293
|
+
- 'lib/boxcars/vector_store/embed_via_open_ai.rb'
|
|
294
|
+
- 'lib/boxcars/vector_store/hnswlib/search.rb'
|
|
295
|
+
- 'lib/boxcars/vector_store/in_memory/search.rb'
|
|
296
|
+
- 'lib/boxcars/vector_store/pgvector/save_to_database.rb'
|
|
297
|
+
|
|
298
|
+
# Offense count: 3
|
|
299
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
300
|
+
Style/RedundantBegin:
|
|
301
|
+
Exclude:
|
|
302
|
+
- 'lib/boxcars/mcp/stdio_client.rb'
|
|
303
|
+
- 'lib/boxcars/openai_compatible_client.rb'
|
|
304
|
+
|
|
305
|
+
# Offense count: 1
|
|
306
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
307
|
+
Style/RedundantParentheses:
|
|
308
|
+
Exclude:
|
|
309
|
+
- 'lib/boxcars/mcp.rb'
|
|
310
|
+
|
|
311
|
+
# Offense count: 1
|
|
312
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
313
|
+
Style/RescueModifier:
|
|
314
|
+
Exclude:
|
|
315
|
+
- 'lib/boxcars/train/tool_calling_train.rb'
|
|
316
|
+
|
|
317
|
+
# Offense count: 1
|
|
318
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
319
|
+
# Configuration parameters: AllowModifier.
|
|
320
|
+
Style/SoleNestedConditional:
|
|
321
|
+
Exclude:
|
|
322
|
+
- 'lib/boxcars/boxcar/json_engine_boxcar.rb'
|
|
323
|
+
|
|
324
|
+
# Offense count: 1
|
|
325
|
+
# This cop supports unsafe autocorrection (--autocorrect-all).
|
|
326
|
+
# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, AllowComments.
|
|
327
|
+
# AllowedMethods: define_method
|
|
328
|
+
Style/SymbolProc:
|
|
329
|
+
Exclude:
|
|
330
|
+
- 'lib/boxcars/boxcar/json_engine_boxcar.rb'
|
|
331
|
+
|
|
332
|
+
# Offense count: 2
|
|
333
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
334
|
+
# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, AllowedMethods.
|
|
335
|
+
# AllowedMethods: to_ary, to_a, to_c, to_enum, to_h, to_hash, to_i, to_int, to_io, to_open, to_path, to_proc, to_r, to_regexp, to_str, to_s, to_sym
|
|
336
|
+
Style/TrivialAccessors:
|
|
337
|
+
Exclude:
|
|
338
|
+
- 'lib/boxcars.rb'
|
|
339
|
+
- 'lib/boxcars/openai_compatible_client.rb'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,84 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
### Upgrade Guide (v0.9 -> v1.0 planned)
|
|
6
|
+
|
|
7
|
+
This section tracks the modernization work that is being added in v0.9 with a compatibility window before v1.0 removals.
|
|
8
|
+
|
|
9
|
+
#### New Runtime / Tooling Foundations (v0.9)
|
|
10
|
+
|
|
11
|
+
- `Boxcars::ToolCallingTrain` added for native LLM tool-calling (chat-completions and OpenAI Responses API style loops).
|
|
12
|
+
- Boxcars now expose normalized tool specs / JSON Schema for tool-calling APIs.
|
|
13
|
+
- `JSONEngineBoxcar` supports JSON Schema validation and can use native structured-output response formats on capable engines.
|
|
14
|
+
- MCP is a first-class integration path:
|
|
15
|
+
- `Boxcars::MCP.stdio(...)` to connect to an MCP server over `stdio`
|
|
16
|
+
- `Boxcars::MCP.boxcars_from_client(...)` to wrap MCP tools as Boxcars
|
|
17
|
+
- `Boxcars::MCP.tool_calling_train(...)` to combine local Boxcars + MCP tools into a `ToolCallingTrain`
|
|
18
|
+
- OpenAI backend migration controls added:
|
|
19
|
+
- Default `openai_client_backend` switched to `:official_openai` (with `:ruby_openai` opt-out)
|
|
20
|
+
- `openai_client_backend` config default (with `OPENAI_CLIENT_BACKEND` env support)
|
|
21
|
+
- `openai_official_client_builder` config hook for official client injection
|
|
22
|
+
- `Boxcars::Openai` per-instance/per-call backend override (`openai_client_backend:`)
|
|
23
|
+
- One-time warning when `:official_openai` falls back to ruby-openai compatibility bridge
|
|
24
|
+
- `openai_official_require_native` toggle to fail fast instead of bridge fallback
|
|
25
|
+
- Backend/client compatibility preflight checks in `OpenAICompatibleClient.validate_backend_configuration!`
|
|
26
|
+
- OpenAI-compatible provider pinning to `:ruby_openai` during migration (Groq/Gemini/Ollama)
|
|
27
|
+
- CI parity lanes via `spec:openai_backend_parity` and `spec:openai_backend_parity_official`
|
|
28
|
+
- Consolidated modernization regression lane via `spec:modernization`
|
|
29
|
+
- Notebook migration setup cells added under `notebooks/` for explicit backend pinning during rollout
|
|
30
|
+
- Upgrade guide includes a notebook compatibility matrix for backend migration expectations
|
|
31
|
+
- Notebook CI lanes added:
|
|
32
|
+
- PR-safe `notebook-smoke` job via `spec:notebooks_smoke`
|
|
33
|
+
- Weekly/manual live compatibility job via `spec:notebooks_live` (requires `OPENAI_ACCESS_TOKEN`)
|
|
34
|
+
- Optional native-only enforcement for live notebook checks via workflow variables (`OPENAI_OFFICIAL_REQUIRE_NATIVE` or `NOTEBOOKS_LIVE_REQUIRE_NATIVE`)
|
|
35
|
+
- Targeted VCR refresh tasks added for OpenAI/embeddings cassette maintenance:
|
|
36
|
+
- `spec:vcr_openai_smoke`
|
|
37
|
+
- `spec:vcr_openai_refresh`
|
|
38
|
+
|
|
39
|
+
#### Model Alias Deprecations (warning now, planned removal in v1.0)
|
|
40
|
+
|
|
41
|
+
Deprecated aliases currently emit a one-time warning (per process) and still work in v0.9.
|
|
42
|
+
|
|
43
|
+
Recommended replacements:
|
|
44
|
+
|
|
45
|
+
- `anthropic` -> `sonnet`
|
|
46
|
+
- `groq` -> `llama-3.3-70b-versatile`
|
|
47
|
+
- `deepseek` -> `deepseek-r1-distill-llama-70b`
|
|
48
|
+
- `mistral` -> `mistral-saba-24b`
|
|
49
|
+
- `online` -> `sonar`
|
|
50
|
+
- `huge` / `online_huge` / `sonar_huge` / `sonar-huge` / `sonar_pro` -> `sonar-pro`
|
|
51
|
+
- `flash` / `gemini-flash` -> `gemini-2.5-flash`
|
|
52
|
+
- `gemini-pro` -> `gemini-2.5-pro`
|
|
53
|
+
- `cerebras` -> `gpt-oss-120b`
|
|
54
|
+
- `qwen` -> `Qwen/Qwen2.5-VL-72B-Instruct`
|
|
55
|
+
|
|
56
|
+
Kept curated aliases (not deprecated):
|
|
57
|
+
|
|
58
|
+
- `sonar`
|
|
59
|
+
- `sonar-pro`
|
|
60
|
+
- `sonnet`
|
|
61
|
+
- `opus`
|
|
62
|
+
|
|
63
|
+
#### Strict Migration Mode (recommended for CI)
|
|
64
|
+
|
|
65
|
+
To fail fast on deprecated aliases during migration testing:
|
|
66
|
+
|
|
67
|
+
```ruby
|
|
68
|
+
Boxcars.configure do |config|
|
|
69
|
+
config.strict_deprecated_model_aliases = true
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# or:
|
|
73
|
+
Boxcars::Engines.strict_deprecated_aliases = true
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### Planned v1.0 Direction
|
|
77
|
+
|
|
78
|
+
- Remove deprecated aliases listed above.
|
|
79
|
+
- Prefer explicit model names and a small curated alias set (`sonar`, `sonar-pro`, `sonnet`, `opus`).
|
|
80
|
+
- Continue OpenAI SDK migration behind the internal OpenAI-compatible client factory seam to reduce provider regressions.
|
|
81
|
+
|
|
3
82
|
## [v0.8.5](https://github.com/BoxcarsAI/boxcars/tree/v0.8.5) (2025-07-01)
|
|
4
83
|
|
|
5
84
|
[Full Changelog](https://github.com/BoxcarsAI/boxcars/compare/v0.8.4...v0.8.5)
|