@botbotgo/better-call 0.1.13 → 0.1.15
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.
- package/README.md +40 -17
- package/benchmarks/bfcl-real-remote-completed-summary.json +119 -1
- package/dist/better-tool.d.ts +2 -2
- package/dist/better-tool.js +17 -1
- package/dist/better-tool.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# BetterCall
|
|
6
6
|
|
|
7
|
-
**One-line wrapper.
|
|
7
|
+
**One-line wrapper. Eight full BFCL remote runs completed. Best: 73.4% → 83.8%.**
|
|
8
8
|
|
|
9
9
|
```ts
|
|
10
10
|
const tools = betterTools([searchTool, calculatorTool]);
|
|
@@ -100,6 +100,25 @@ const toolsWithRepair = betterTools([searchTool, calculatorTool], { repairModel:
|
|
|
100
100
|
|
|
101
101
|
`options` is optional. Each tool must expose `name` and `invoke(input)`. BetterCall preserves each tool's shape and wraps `invoke`.
|
|
102
102
|
|
|
103
|
+
Tool schemas can be plain JSON Schema, Zod object schemas, or Zod-shaped records:
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
import { z } from "zod";
|
|
107
|
+
|
|
108
|
+
const tools = betterTools([
|
|
109
|
+
{
|
|
110
|
+
name: "stock_quote",
|
|
111
|
+
schema: {
|
|
112
|
+
ticker: z.string(),
|
|
113
|
+
market: z.enum(["US", "HK", "CN"]),
|
|
114
|
+
},
|
|
115
|
+
invoke: async (args) => getStockQuote(args),
|
|
116
|
+
},
|
|
117
|
+
]);
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
BetterCall converts Zod schemas to JSON Schema before validation and repair. If your runtime already converts schemas, passing JSON Schema directly remains the lowest-dependency path.
|
|
121
|
+
|
|
103
122
|
Without `repairModel` or `repair`, BetterCall validates and blocks unsafe calls instead of fixing them. `repairModel` only needs an `invoke(input)` method, such as a LangChain chat model. If it is provided, BetterCall supplies the repair prompt and JSON parser.
|
|
104
123
|
|
|
105
124
|
Modes:
|
|
@@ -142,6 +161,9 @@ qwen3.5:2b
|
|
|
142
161
|
lfm2.5-thinking:latest
|
|
143
162
|
Raw 50.8% | ####################....................
|
|
144
163
|
BetterCall 54.8% | ######################..................
|
|
164
|
+
qwen3.5:4b
|
|
165
|
+
Raw 43.6% | #################.......................
|
|
166
|
+
BetterCall 43.4% | #################.......................
|
|
145
167
|
gemma4:e2b
|
|
146
168
|
Raw 24.3% | ##########..............................
|
|
147
169
|
BetterCall 24.7% | ##########..............................
|
|
@@ -155,26 +177,27 @@ gemma4:e2b
|
|
|
155
177
|
| 4 | `qwen3.5:0.8b` | 3,625 | 54.6% | 56.9% | +2.3pp | 901 |
|
|
156
178
|
| 5 | `qwen3.5:2b` | 3,625 | 53.9% | 54.9% | +1.0pp | 1,308 |
|
|
157
179
|
| 6 | `lfm2.5-thinking:latest` | 3,625 | 50.8% | 54.8% | +4.0pp | 1,142 |
|
|
158
|
-
| 7 | `
|
|
180
|
+
| 7 | `qwen3.5:4b` | 3,625 | 43.6% | 43.4% | -0.2pp | 1,847 |
|
|
181
|
+
| 8 | `gemma4:e2b` | 3,625 | 24.3% | 24.7% | +0.4pp | 2,641 |
|
|
159
182
|
|
|
160
|
-
Latest completed model category detail: `
|
|
183
|
+
Latest completed model category detail: `qwen3.5:4b`.
|
|
161
184
|
|
|
162
185
|
| Category | Cases | Raw | BetterCall repair | Lift | Request errors |
|
|
163
186
|
| --- | ---: | ---: | ---: | ---: | ---: |
|
|
164
|
-
| `simple_python` | 400 |
|
|
165
|
-
| `simple_java` | 100 |
|
|
166
|
-
| `simple_javascript` | 50 |
|
|
167
|
-
| `multiple` | 200 |
|
|
168
|
-
| `parallel` | 200 |
|
|
169
|
-
| `parallel_multiple` | 200 |
|
|
170
|
-
| `irrelevance` | 240 |
|
|
171
|
-
| `live_simple` | 258 |
|
|
172
|
-
| `live_multiple` | 1,053 |
|
|
173
|
-
| `live_parallel` | 16 |
|
|
174
|
-
| `live_parallel_multiple` | 24 |
|
|
175
|
-
| `live_irrelevance` | 884 |
|
|
176
|
-
|
|
177
|
-
|
|
187
|
+
| `simple_python` | 400 | 81.3% | 81.3% | +0.0pp | 54 |
|
|
188
|
+
| `simple_java` | 100 | 56.0% | 56.0% | +0.0pp | 32 |
|
|
189
|
+
| `simple_javascript` | 50 | 48.0% | 48.0% | +0.0pp | 18 |
|
|
190
|
+
| `multiple` | 200 | 83.5% | 83.5% | +0.0pp | 20 |
|
|
191
|
+
| `parallel` | 200 | 70.0% | 70.0% | +0.0pp | 45 |
|
|
192
|
+
| `parallel_multiple` | 200 | 47.0% | 47.0% | +0.0pp | 96 |
|
|
193
|
+
| `irrelevance` | 240 | 68.8% | 68.8% | +0.0pp | 75 |
|
|
194
|
+
| `live_simple` | 258 | 66.7% | 66.3% | -0.4pp | 45 |
|
|
195
|
+
| `live_multiple` | 1,053 | 41.6% | 41.0% | -0.6pp | 538 |
|
|
196
|
+
| `live_parallel` | 16 | 0.0% | 0.0% | +0.0pp | 16 |
|
|
197
|
+
| `live_parallel_multiple` | 24 | 0.0% | 0.0% | +0.0pp | 24 |
|
|
198
|
+
| `live_irrelevance` | 884 | 0.0% | 0.0% | +0.0pp | 884 |
|
|
199
|
+
|
|
200
|
+
This `qwen3.5:4b` run hit sustained remote request failures in the live categories; those failures are counted as incorrect by the benchmark.
|
|
178
201
|
|
|
179
202
|
Historical targeted wrapper benchmark:
|
|
180
203
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "BFCL v4 full remote Ollama runs",
|
|
3
3
|
"source": "Real model calls against all supported BFCL v4 single-turn tool-call categories completed in this repository",
|
|
4
4
|
"note": "Endpoint redacted. Scores count request errors/timeouts as incorrect. This is not an official BFCL leaderboard submission.",
|
|
5
|
-
"generatedAt": "2026-05-
|
|
5
|
+
"generatedAt": "2026-05-09T01:31:12.909Z",
|
|
6
6
|
"results": [
|
|
7
7
|
{
|
|
8
8
|
"model": "granite4.1:3b",
|
|
@@ -712,6 +712,124 @@
|
|
|
712
712
|
}
|
|
713
713
|
]
|
|
714
714
|
},
|
|
715
|
+
{
|
|
716
|
+
"model": "qwen3.5:4b",
|
|
717
|
+
"total": 3625,
|
|
718
|
+
"rawCorrect": 1581,
|
|
719
|
+
"betterCorrect": 1574,
|
|
720
|
+
"errors": 1847,
|
|
721
|
+
"repaired": 0,
|
|
722
|
+
"categories": [
|
|
723
|
+
{
|
|
724
|
+
"model": "qwen3.5:4b",
|
|
725
|
+
"category": "simple_python",
|
|
726
|
+
"total": 400,
|
|
727
|
+
"rawCorrect": 325,
|
|
728
|
+
"betterCorrect": 325,
|
|
729
|
+
"errors": 54,
|
|
730
|
+
"repaired": 0
|
|
731
|
+
},
|
|
732
|
+
{
|
|
733
|
+
"model": "qwen3.5:4b",
|
|
734
|
+
"category": "simple_java",
|
|
735
|
+
"total": 100,
|
|
736
|
+
"rawCorrect": 56,
|
|
737
|
+
"betterCorrect": 56,
|
|
738
|
+
"errors": 32,
|
|
739
|
+
"repaired": 0
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
"model": "qwen3.5:4b",
|
|
743
|
+
"category": "simple_javascript",
|
|
744
|
+
"total": 50,
|
|
745
|
+
"rawCorrect": 24,
|
|
746
|
+
"betterCorrect": 24,
|
|
747
|
+
"errors": 18,
|
|
748
|
+
"repaired": 0
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
"model": "qwen3.5:4b",
|
|
752
|
+
"category": "multiple",
|
|
753
|
+
"total": 200,
|
|
754
|
+
"rawCorrect": 167,
|
|
755
|
+
"betterCorrect": 167,
|
|
756
|
+
"errors": 20,
|
|
757
|
+
"repaired": 0
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
"model": "qwen3.5:4b",
|
|
761
|
+
"category": "parallel",
|
|
762
|
+
"total": 200,
|
|
763
|
+
"rawCorrect": 140,
|
|
764
|
+
"betterCorrect": 140,
|
|
765
|
+
"errors": 45,
|
|
766
|
+
"repaired": 0
|
|
767
|
+
},
|
|
768
|
+
{
|
|
769
|
+
"model": "qwen3.5:4b",
|
|
770
|
+
"category": "parallel_multiple",
|
|
771
|
+
"total": 200,
|
|
772
|
+
"rawCorrect": 94,
|
|
773
|
+
"betterCorrect": 94,
|
|
774
|
+
"errors": 96,
|
|
775
|
+
"repaired": 0
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
"model": "qwen3.5:4b",
|
|
779
|
+
"category": "irrelevance",
|
|
780
|
+
"total": 240,
|
|
781
|
+
"rawCorrect": 165,
|
|
782
|
+
"betterCorrect": 165,
|
|
783
|
+
"errors": 75,
|
|
784
|
+
"repaired": 0
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
"model": "qwen3.5:4b",
|
|
788
|
+
"category": "live_simple",
|
|
789
|
+
"total": 258,
|
|
790
|
+
"rawCorrect": 172,
|
|
791
|
+
"betterCorrect": 171,
|
|
792
|
+
"errors": 45,
|
|
793
|
+
"repaired": 0
|
|
794
|
+
},
|
|
795
|
+
{
|
|
796
|
+
"model": "qwen3.5:4b",
|
|
797
|
+
"category": "live_multiple",
|
|
798
|
+
"total": 1053,
|
|
799
|
+
"rawCorrect": 438,
|
|
800
|
+
"betterCorrect": 432,
|
|
801
|
+
"errors": 538,
|
|
802
|
+
"repaired": 0
|
|
803
|
+
},
|
|
804
|
+
{
|
|
805
|
+
"model": "qwen3.5:4b",
|
|
806
|
+
"category": "live_parallel",
|
|
807
|
+
"total": 16,
|
|
808
|
+
"rawCorrect": 0,
|
|
809
|
+
"betterCorrect": 0,
|
|
810
|
+
"errors": 16,
|
|
811
|
+
"repaired": 0
|
|
812
|
+
},
|
|
813
|
+
{
|
|
814
|
+
"model": "qwen3.5:4b",
|
|
815
|
+
"category": "live_parallel_multiple",
|
|
816
|
+
"total": 24,
|
|
817
|
+
"rawCorrect": 0,
|
|
818
|
+
"betterCorrect": 0,
|
|
819
|
+
"errors": 24,
|
|
820
|
+
"repaired": 0
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"model": "qwen3.5:4b",
|
|
824
|
+
"category": "live_irrelevance",
|
|
825
|
+
"total": 884,
|
|
826
|
+
"rawCorrect": 0,
|
|
827
|
+
"betterCorrect": 0,
|
|
828
|
+
"errors": 884,
|
|
829
|
+
"repaired": 0
|
|
830
|
+
}
|
|
831
|
+
]
|
|
832
|
+
},
|
|
715
833
|
{
|
|
716
834
|
"model": "gemma4:e2b",
|
|
717
835
|
"total": 3625,
|
package/dist/better-tool.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type RepairModelLike } from "./default-repair.js";
|
|
2
|
-
import type { GuardPolicy,
|
|
2
|
+
import type { GuardPolicy, RepairFunction, SemanticValidator, ToolCallIssue } from "./types.js";
|
|
3
3
|
export type BetterToolLike = {
|
|
4
4
|
name: string;
|
|
5
5
|
description?: string;
|
|
@@ -8,7 +8,7 @@ export type BetterToolLike = {
|
|
|
8
8
|
};
|
|
9
9
|
export type BetterToolsOptions = {
|
|
10
10
|
userInput?: string | ((toolInput: Record<string, unknown>) => string);
|
|
11
|
-
schema?:
|
|
11
|
+
schema?: unknown;
|
|
12
12
|
validate?: SemanticValidator;
|
|
13
13
|
repairModel?: RepairModelLike;
|
|
14
14
|
repair?: RepairFunction;
|
package/dist/better-tool.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defaultRepair } from "./default-repair.js";
|
|
2
2
|
import { reliableToolCalls } from "./reliable.js";
|
|
3
|
+
import * as z from "zod";
|
|
3
4
|
export class BetterToolValidationError extends Error {
|
|
4
5
|
tool;
|
|
5
6
|
issues;
|
|
@@ -42,7 +43,7 @@ function toToolDefinition(tool, options) {
|
|
|
42
43
|
return {
|
|
43
44
|
name: tool.name,
|
|
44
45
|
description: tool.description,
|
|
45
|
-
schema: options.schema ??
|
|
46
|
+
schema: normalizeSchema(options.schema ?? tool.schema),
|
|
46
47
|
validate: options.validate,
|
|
47
48
|
};
|
|
48
49
|
}
|
|
@@ -61,9 +62,24 @@ function applySafeArgs(input, args) {
|
|
|
61
62
|
return { ...input, args };
|
|
62
63
|
return args;
|
|
63
64
|
}
|
|
65
|
+
function normalizeSchema(schema) {
|
|
66
|
+
if (isZodSchema(schema))
|
|
67
|
+
return z.toJSONSchema(schema);
|
|
68
|
+
if (isZodShape(schema))
|
|
69
|
+
return z.toJSONSchema(z.object(schema));
|
|
70
|
+
if (isJsonSchema(schema))
|
|
71
|
+
return schema;
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
64
74
|
function isJsonSchema(value) {
|
|
65
75
|
return isRecord(value) && (typeof value.type === "string" || Array.isArray(value.type) || isRecord(value.properties));
|
|
66
76
|
}
|
|
77
|
+
function isZodSchema(value) {
|
|
78
|
+
return isRecord(value) && isRecord(value._zod);
|
|
79
|
+
}
|
|
80
|
+
function isZodShape(value) {
|
|
81
|
+
return isRecord(value) && Object.keys(value).length > 0 && Object.values(value).every(isZodSchema);
|
|
82
|
+
}
|
|
67
83
|
function isRecord(value) {
|
|
68
84
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
69
85
|
}
|
package/dist/better-tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-tool.js","sourceRoot":"","sources":["../src/better-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"better-tool.js","sourceRoot":"","sources":["../src/better-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAmBzB,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAEhC;IACA;IAFlB,YACkB,IAAY,EACZ,MAAuB;QAEvC,KAAK,CAAC,uBAAuB,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAHzE,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAiB;QAGvC,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAA2B,KAAU,EAAE,UAA8B,EAAE;IAChG,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAA2B,IAAO,EAAE,OAA2B;IACjF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAM,CAAC;IACrF,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,KAAc,EAAE,MAAgB,EAAE,EAAE;QAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACrC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;YACpD,KAAK,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,OAA2B;IAChD,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAoB,EAAE,OAA2B;IACzE,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QACtD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,SAA0C,EAC1C,IAA6B;IAE7B,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC/D,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAA6B;IAClE,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACvE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAe,CAAC;IACrE,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAe,CAAC;IAC9E,IAAI,YAAY,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botbotgo/better-call",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"description": "LLM tool-call reliability layer.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -48,5 +48,8 @@
|
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/node": "^24.10.1",
|
|
50
50
|
"typescript": "^5.9.3"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"zod": "^4.4.3"
|
|
51
54
|
}
|
|
52
55
|
}
|