@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 CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # BetterCall
6
6
 
7
- **One-line wrapper. Seven full BFCL remote runs completed. Best: 73.4% → 83.8%.**
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 | `gemma4:e2b` | 3,625 | 24.3% | 24.7% | +0.4pp | 2,641 |
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: `qwen2.5:7b-instruct`.
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 | 91.3% | 93.0% | +1.8pp | 9 |
165
- | `simple_java` | 100 | 55.0% | 59.0% | +4.0pp | 3 |
166
- | `simple_javascript` | 50 | 60.0% | 64.0% | +4.0pp | 0 |
167
- | `multiple` | 200 | 89.5% | 91.0% | +1.5pp | 3 |
168
- | `parallel` | 200 | 81.0% | 84.5% | +3.5pp | 2 |
169
- | `parallel_multiple` | 200 | 77.0% | 78.0% | +1.0pp | 6 |
170
- | `irrelevance` | 240 | 64.6% | 89.6% | +25.0pp | 0 |
171
- | `live_simple` | 258 | 69.0% | 72.1% | +3.1pp | 1 |
172
- | `live_multiple` | 1,053 | 69.0% | 73.4% | +4.4pp | 18 |
173
- | `live_parallel` | 16 | 25.0% | 37.5% | +12.5pp | 2 |
174
- | `live_parallel_multiple` | 24 | 50.0% | 50.0% | +0.0pp | 2 |
175
- | `live_irrelevance` | 884 | 67.6% | 75.9% | +8.3pp | 34 |
176
-
177
- The strongest `qwen2.5:7b-instruct` category lift was `irrelevance`, improving from 64.6% to 89.6%. The largest absolute live gain was `live_irrelevance`, improving by 73 cases.
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-08T22:24:15.073Z",
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,
@@ -1,5 +1,5 @@
1
1
  import { type RepairModelLike } from "./default-repair.js";
2
- import type { GuardPolicy, JsonSchema, RepairFunction, SemanticValidator, ToolCallIssue } from "./types.js";
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?: JsonSchema;
11
+ schema?: unknown;
12
12
  validate?: SemanticValidator;
13
13
  repairModel?: RepairModelLike;
14
14
  repair?: RepairFunction;
@@ -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 ?? (isJsonSchema(tool.schema) ? tool.schema : undefined),
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"better-tool.js","sourceRoot":"","sources":["../src/better-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"better-tool.js","sourceRoot":"","sources":["../src/better-tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botbotgo/better-call",
3
- "version": "0.1.13",
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
  }