@botbotgo/better-call 0.1.16 → 0.1.18
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 +104 -157
- package/dist/better-tool.d.ts +2 -1
- package/dist/better-tool.js +2 -0
- package/dist/better-tool.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/reliable.js +113 -8
- package/dist/reliable.js.map +1 -1
- package/dist/schema.d.ts +3 -1
- package/dist/schema.js +126 -0
- package/dist/schema.js.map +1 -1
- package/dist/types.d.ts +54 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,13 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
# BetterCall
|
|
6
6
|
|
|
7
|
-
**
|
|
7
|
+
**A small runtime reliability layer for LangChain and LLM tool calls.**
|
|
8
|
+
|
|
9
|
+
BetterCall wraps existing LangChain-style tools, validates model-generated calls before execution, and can optionally ask a repair model to fix rejected calls. In full BFCL v4 remote Ollama runs, the best measured lift was `granite4.1:3b`: **73.4% raw -> 83.8% with BetterCall**.
|
|
8
10
|
|
|
9
11
|
```ts
|
|
12
|
+
import { betterTools } from "@botbotgo/better-call";
|
|
13
|
+
|
|
10
14
|
const tools = betterTools([searchTool, calculatorTool]);
|
|
11
15
|
```
|
|
12
16
|
|
|
13
|
-
No model means validate
|
|
17
|
+
No model means validate and block only. Add `repairModel` when you want automatic repair.
|
|
14
18
|
|
|
15
19
|
## Install
|
|
16
20
|
|
|
@@ -18,89 +22,92 @@ No model means validate + block only. Add `repairModel` when you want automatic
|
|
|
18
22
|
npm install @botbotgo/better-call
|
|
19
23
|
```
|
|
20
24
|
|
|
21
|
-
##
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
LangChain tools work directly:
|
|
22
28
|
|
|
23
29
|
```ts
|
|
30
|
+
import { tool } from "@langchain/core/tools";
|
|
24
31
|
import { betterTools } from "@botbotgo/better-call";
|
|
32
|
+
import { z } from "zod";
|
|
25
33
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Pass a repair model to let BetterCall fix rejected calls automatically. This can be the same chat model your agent uses, or a separate cheaper/stronger model dedicated to repair:
|
|
31
|
-
|
|
32
|
-
```ts
|
|
33
|
-
// Validate + repair: validate, repair with a model, validate again, then execute.
|
|
34
|
-
const tools = betterTools([searchTool, calculatorTool], {
|
|
35
|
-
repairModel: model,
|
|
34
|
+
const searchTool = tool(async ({ query }) => search(query), {
|
|
35
|
+
name: "search",
|
|
36
|
+
description: "Search the web.",
|
|
37
|
+
schema: z.object({ query: z.string() }),
|
|
36
38
|
});
|
|
37
|
-
```
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
npm run bench:bfcl
|
|
40
|
+
const tools = betterTools([searchTool]);
|
|
43
41
|
```
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
For the full official BFCL v4 reproduction, use Berkeley's published checkpoint/package: commit `f7cf735` or `pip install bfcl-eval==2025.12.17`.
|
|
43
|
+
The same wrapper works for any tool with `name`, `schema`, and `invoke(input)`:
|
|
48
44
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
python3 -m venv /tmp/better-call-bfcl-venv
|
|
53
|
-
/tmp/better-call-bfcl-venv/bin/pip install "bfcl-eval==2025.12.17" soundfile
|
|
45
|
+
```ts
|
|
46
|
+
import { betterTools } from "@botbotgo/better-call";
|
|
54
47
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
BENCH_CATEGORIES=all \
|
|
58
|
-
BENCH_CASES_PER_CATEGORY=0 \
|
|
59
|
-
npm run bench:bfcl:real
|
|
48
|
+
// Validate and block bad calls before execution.
|
|
49
|
+
const tools = betterTools([searchTool, calculatorTool]);
|
|
60
50
|
```
|
|
61
51
|
|
|
62
|
-
|
|
52
|
+
To repair rejected calls automatically, pass a LangChain chat model or any model with `invoke(input)`:
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
63
56
|
|
|
64
|
-
|
|
57
|
+
const repairModel = new ChatOpenAI({ model: "gpt-4.1-mini" });
|
|
65
58
|
|
|
66
|
-
|
|
67
|
-
|
|
59
|
+
const tools = betterTools([searchTool, calculatorTool], {
|
|
60
|
+
repairModel,
|
|
61
|
+
});
|
|
68
62
|
```
|
|
69
63
|
|
|
70
|
-
|
|
64
|
+
BetterCall validates, repairs rejected calls, validates again, and only then invokes the original tool.
|
|
71
65
|
|
|
72
66
|
## What It Catches
|
|
73
67
|
|
|
74
|
-
|
|
|
75
|
-
| --- | --- |
|
|
76
|
-
| Tool selection | Unknown
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
| Schema | Invalid enum | `NASDAQ` where only `US`, `HK`, `CN` are allowed |
|
|
82
|
-
| Schema | Extra arg | `currency` when `additionalProperties: false` |
|
|
83
|
-
| Policy | Semantic validator rejection | Domain-specific validator rejects unsafe args |
|
|
84
|
-
|
|
85
|
-
In validate + block mode, BetterCall rejects these calls before execution. With `repairModel`, it asks the model to fix rejected calls, validates again, and only then executes.
|
|
68
|
+
| Area | Examples |
|
|
69
|
+
| --- | --- |
|
|
70
|
+
| Tool selection | Unknown tools, irrelevant tool calls |
|
|
71
|
+
| Arguments | Missing required args, wrong arg names, extra args |
|
|
72
|
+
| Schema | Wrong types, invalid enums, `additionalProperties: false` violations |
|
|
73
|
+
| Policy | Expected no tool call, expected some tool call |
|
|
74
|
+
| Semantic validation | Domain-specific validator rejects unsafe args |
|
|
86
75
|
|
|
87
76
|
## API
|
|
88
77
|
|
|
89
|
-
### `betterTools`
|
|
78
|
+
### `betterTools(tools, options?)`
|
|
90
79
|
|
|
91
|
-
|
|
80
|
+
Wraps an existing tool array. Each tool must expose `name` and `invoke(input)`. BetterCall preserves the original tool shape and wraps `invoke`.
|
|
92
81
|
|
|
93
82
|
```ts
|
|
94
|
-
|
|
95
|
-
const tools = betterTools([searchTool, calculatorTool]);
|
|
83
|
+
const guarded = betterTools([searchTool]);
|
|
96
84
|
|
|
97
|
-
|
|
98
|
-
|
|
85
|
+
const repaired = betterTools([searchTool], {
|
|
86
|
+
repairModel: model,
|
|
87
|
+
});
|
|
99
88
|
```
|
|
100
89
|
|
|
101
|
-
|
|
90
|
+
Options:
|
|
91
|
+
|
|
92
|
+
| Option | Purpose |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| `repairModel` | Model used by the default repair prompt/parser |
|
|
95
|
+
| `repair` | Custom repair function |
|
|
96
|
+
| `mode` | `"guard"`, `"repair"`, or `"review"` |
|
|
97
|
+
| `policy` | Expected call policy, such as `expected: "none"` |
|
|
98
|
+
| `validate` | Custom semantic validator |
|
|
99
|
+
| `schema` | Override the wrapped tool schema |
|
|
100
|
+
| `userInput` | Original user input or a function that derives it from tool args |
|
|
102
101
|
|
|
103
|
-
|
|
102
|
+
Modes:
|
|
103
|
+
|
|
104
|
+
| Mode | Behavior |
|
|
105
|
+
| --- | --- |
|
|
106
|
+
| no model / `"guard"` | Validate and block unsafe calls |
|
|
107
|
+
| `"repair"` or `repairModel` | Repair rejected calls, then validate again |
|
|
108
|
+
| `"review"` | Ask for a full self-check even when calls pass schema |
|
|
109
|
+
|
|
110
|
+
Tool schemas can be JSON Schema, Zod object schemas, or Zod-shaped records:
|
|
104
111
|
|
|
105
112
|
```ts
|
|
106
113
|
import { z } from "zod";
|
|
@@ -117,121 +124,61 @@ const tools = betterTools([
|
|
|
117
124
|
]);
|
|
118
125
|
```
|
|
119
126
|
|
|
120
|
-
|
|
127
|
+
Lower-level exports are available for custom runtimes:
|
|
121
128
|
|
|
122
|
-
|
|
129
|
+
- `guardToolCalls(...)`
|
|
130
|
+
- `reliableToolCalls(...)`
|
|
131
|
+
- `normalizeToolSchema(schema)`
|
|
132
|
+
- `defaultRepair(model)`
|
|
133
|
+
- `BetterToolValidationError`
|
|
123
134
|
|
|
124
|
-
|
|
135
|
+
## Benchmarks
|
|
125
136
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
| Mode | Behavior |
|
|
129
|
-
| --- | --- |
|
|
130
|
-
| no model | Validate and block only |
|
|
131
|
-
| `repairModel` | Validate, repair rejected calls, then validate again |
|
|
132
|
-
| custom `repair` | Use your own repair function |
|
|
133
|
-
| `review` | Ask for a full self-check even when calls pass schema |
|
|
137
|
+
Run the bundled targeted BFCL wrapper benchmark:
|
|
134
138
|
|
|
135
|
-
|
|
139
|
+
```bash
|
|
140
|
+
npm run bench:bfcl
|
|
141
|
+
```
|
|
136
142
|
|
|
137
|
-
|
|
143
|
+
Run real-model BFCL v4 calls against your Ollama endpoint:
|
|
138
144
|
|
|
139
|
-
|
|
145
|
+
```bash
|
|
146
|
+
python3 -m venv /tmp/better-call-bfcl-venv
|
|
147
|
+
/tmp/better-call-bfcl-venv/bin/pip install "bfcl-eval==2025.12.17" soundfile
|
|
140
148
|
|
|
141
|
-
|
|
149
|
+
OLLAMA_BASE_URL=http://127.0.0.1:11434 \
|
|
150
|
+
BENCH_MODELS=qwen3.5:0.8b \
|
|
151
|
+
BENCH_CATEGORIES=all \
|
|
152
|
+
BENCH_CASES_PER_CATEGORY=0 \
|
|
153
|
+
npm run bench:bfcl:real
|
|
154
|
+
```
|
|
142
155
|
|
|
143
|
-
|
|
156
|
+
Run the small-model matrix:
|
|
144
157
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
```text
|
|
148
|
-
granite4.1:3b
|
|
149
|
-
Raw 73.4% | #############################...........
|
|
150
|
-
BetterCall 83.8% | ##################################......
|
|
151
|
-
qwen2.5:7b-instruct
|
|
152
|
-
Raw 72.2% | #############################...........
|
|
153
|
-
BetterCall 78.2% | ###############################.........
|
|
154
|
-
qwen3:0.6b
|
|
155
|
-
Raw 55.5% | ######################..................
|
|
156
|
-
BetterCall 63.6% | #########################...............
|
|
157
|
-
qwen3.5:0.8b
|
|
158
|
-
Raw 54.6% | ######################..................
|
|
159
|
-
BetterCall 56.9% | #######################.................
|
|
160
|
-
qwen3.5:2b
|
|
161
|
-
Raw 53.9% | ######################..................
|
|
162
|
-
BetterCall 54.9% | ######################..................
|
|
163
|
-
lfm2.5-thinking:latest
|
|
164
|
-
Raw 50.8% | ####################....................
|
|
165
|
-
BetterCall 54.8% | ######################..................
|
|
166
|
-
qwen3.5:4b
|
|
167
|
-
Raw 43.6% | #################.......................
|
|
168
|
-
BetterCall 43.4% | #################.......................
|
|
169
|
-
gemma4:e2b
|
|
170
|
-
Raw 24.3% | ##########..............................
|
|
171
|
-
BetterCall 24.7% | ##########..............................
|
|
158
|
+
```bash
|
|
159
|
+
OLLAMA_BASE_URL=http://127.0.0.1:11434 npm run bench:bfcl:remote-small-all
|
|
172
160
|
```
|
|
173
161
|
|
|
174
|
-
|
|
175
|
-
| ---: | --- | ---: | ---: | ---: | ---: | ---: |
|
|
176
|
-
| 1 | `granite4.1:3b` | 3,625 | 73.4% | 83.8% | +10.4pp | 25 |
|
|
177
|
-
| 2 | `qwen2.5:7b-instruct` | 3,625 | 72.2% | 78.2% | +5.9pp | 80 |
|
|
178
|
-
| 3 | `qwen3:0.6b` | 3,625 | 55.5% | 63.6% | +8.2pp | 217 |
|
|
179
|
-
| 4 | `qwen3.5:0.8b` | 3,625 | 54.6% | 56.9% | +2.3pp | 901 |
|
|
180
|
-
| 5 | `qwen3.5:2b` | 3,625 | 53.9% | 54.9% | +1.0pp | 1,308 |
|
|
181
|
-
| 6 | `lfm2.5-thinking:latest` | 3,625 | 50.8% | 54.8% | +4.0pp | 1,142 |
|
|
182
|
-
| 7 | `qwen3.5:4b` | 3,625 | 43.6% | 43.4% | -0.2pp | 1,847 |
|
|
183
|
-
| 8 | `gemma4:e2b` | 3,625 | 24.3% | 24.7% | +0.4pp | 2,641 |
|
|
162
|
+
Notes:
|
|
184
163
|
|
|
185
|
-
|
|
164
|
+
- These are BetterCall wrapper benchmarks, not official BFCL leaderboard submissions.
|
|
165
|
+
- Full official BFCL v4 reproduction should use Berkeley's published checkpoint/package: commit `f7cf735` or `bfcl-eval==2025.12.17`.
|
|
166
|
+
- Real runs use Ollama `/api/chat` tool-call requests.
|
|
167
|
+
- Request errors and timeouts count as incorrect.
|
|
168
|
+
- Benchmark JSON redacts endpoints by default. Set `BENCH_SHOW_ENDPOINT=1` only for private debugging.
|
|
169
|
+
|
|
170
|
+
Latest completed remote run artifact: `benchmarks/bfcl-real-remote-completed-summary.json`.
|
|
186
171
|
|
|
187
|
-
|
|
|
172
|
+
| Model | Cases | Raw | BetterCall | Lift | Request errors |
|
|
188
173
|
| --- | ---: | ---: | ---: | ---: | ---: |
|
|
189
|
-
| `
|
|
190
|
-
| `
|
|
191
|
-
| `
|
|
192
|
-
| `
|
|
193
|
-
| `
|
|
194
|
-
| `
|
|
195
|
-
| `
|
|
196
|
-
| `
|
|
197
|
-
| `live_multiple` | 1,053 | 41.6% | 41.0% | -0.6pp | 538 |
|
|
198
|
-
| `live_parallel` | 16 | 0.0% | 0.0% | +0.0pp | 16 |
|
|
199
|
-
| `live_parallel_multiple` | 24 | 0.0% | 0.0% | +0.0pp | 24 |
|
|
200
|
-
| `live_irrelevance` | 884 | 0.0% | 0.0% | +0.0pp | 884 |
|
|
201
|
-
|
|
202
|
-
This `qwen3.5:4b` run hit sustained remote request failures in the live categories; those failures are counted as incorrect by the benchmark.
|
|
203
|
-
|
|
204
|
-
Historical targeted wrapper benchmark:
|
|
205
|
-
|
|
206
|
-
| Model | Raw | BetterCall repair | Accuracy lift |
|
|
207
|
-
| --- | ---: | ---: | ---: |
|
|
208
|
-
| `gemma4:e2b` | 81.3% | 91.3% | +10.0pp |
|
|
209
|
-
| `qwen3.5:2b` | 75.3% | 84.0% | +8.7pp |
|
|
210
|
-
| `qwen3.5:9b` | 84.0% | 90.0% | +6.0pp |
|
|
211
|
-
| `qwen3.5:4b` | 82.0% | 87.3% | +5.3pp |
|
|
212
|
-
| `granite4.1:3b` | 66.0% | 69.3% | +3.3pp |
|
|
213
|
-
|
|
214
|
-
Strongest result: BFCL `irrelevance`, where the model should not call any tool.
|
|
215
|
-
|
|
216
|
-
| Model | Raw irrelevance | BetterCall repair |
|
|
217
|
-
| --- | ---: | ---: |
|
|
218
|
-
| `qwen3.5:2b` | 74% | 100% |
|
|
219
|
-
| `qwen3.5:4b` | 84% | 100% |
|
|
220
|
-
| `qwen3.5:9b` | 84% | 100% |
|
|
221
|
-
| `granite4.1:3b` | 92% | 100% |
|
|
222
|
-
| `gemma4:e2b` | 70% | 100% |
|
|
223
|
-
|
|
224
|
-
## Why It Exists
|
|
225
|
-
|
|
226
|
-
Small models are useful because they are cheap and fast. They also make tool mistakes:
|
|
227
|
-
|
|
228
|
-
- call a tool that does not exist
|
|
229
|
-
- fill the wrong parameter names
|
|
230
|
-
- pass the wrong types
|
|
231
|
-
- call tools when no tool is relevant
|
|
232
|
-
- produce a call that looks valid but is unsafe to execute
|
|
233
|
-
|
|
234
|
-
BetterCall reduces those failures before they reach production tools.
|
|
174
|
+
| `granite4.1:3b` | 3,625 | 73.4% | 83.8% | +10.4pp | 25 |
|
|
175
|
+
| `qwen2.5:7b-instruct` | 3,625 | 72.2% | 78.2% | +5.9pp | 80 |
|
|
176
|
+
| `qwen3:0.6b` | 3,625 | 55.5% | 63.6% | +8.2pp | 217 |
|
|
177
|
+
| `qwen3.5:0.8b` | 3,625 | 54.6% | 56.9% | +2.3pp | 901 |
|
|
178
|
+
| `qwen3.5:2b` | 3,625 | 53.9% | 54.9% | +1.0pp | 1,308 |
|
|
179
|
+
| `lfm2.5-thinking:latest` | 3,625 | 50.8% | 54.8% | +4.0pp | 1,142 |
|
|
180
|
+
| `qwen3.5:4b` | 3,625 | 43.6% | 43.4% | -0.2pp | 1,847 |
|
|
181
|
+
| `gemma4:e2b` | 3,625 | 24.3% | 24.7% | +0.4pp | 2,641 |
|
|
235
182
|
|
|
236
183
|
## License
|
|
237
184
|
|
package/dist/better-tool.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type RepairModelLike } from "./default-repair.js";
|
|
2
|
-
import type { GuardPolicy, RepairFunction, SemanticValidator, ToolCallIssue } from "./types.js";
|
|
2
|
+
import type { GuardPolicy, RepairFunction, RepairPolicy, SemanticValidator, ToolCallIssue } from "./types.js";
|
|
3
3
|
export type BetterToolLike = {
|
|
4
4
|
name: string;
|
|
5
5
|
description?: string;
|
|
@@ -13,6 +13,7 @@ export type BetterToolsOptions = {
|
|
|
13
13
|
repairModel?: RepairModelLike;
|
|
14
14
|
repair?: RepairFunction;
|
|
15
15
|
policy?: GuardPolicy;
|
|
16
|
+
repairPolicy?: RepairPolicy;
|
|
16
17
|
mode?: "guard" | "repair" | "review";
|
|
17
18
|
};
|
|
18
19
|
export declare class BetterToolValidationError extends Error {
|
package/dist/better-tool.js
CHANGED
|
@@ -23,7 +23,9 @@ function wrapOneTool(tool, options) {
|
|
|
23
23
|
tools: [toToolDefinition(tool, options)],
|
|
24
24
|
calls: [{ tool: tool.name, args }],
|
|
25
25
|
policy: options.policy,
|
|
26
|
+
repairPolicy: options.repairPolicy,
|
|
26
27
|
repair: resolveRepair(options),
|
|
28
|
+
repairSource: options.repairModel && !options.repair ? "model" : "custom",
|
|
27
29
|
mode: options.mode,
|
|
28
30
|
});
|
|
29
31
|
if (!result.ok) {
|
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;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"better-tool.js","sourceRoot":"","sources":["../src/better-tool.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ export { guardToolCalls } from "./guard.js";
|
|
|
2
2
|
export { buildRepairPrompt, buildReviewPrompt } from "./prompts.js";
|
|
3
3
|
export { defaultRepair } from "./default-repair.js";
|
|
4
4
|
export type { RepairModelLike } from "./default-repair.js";
|
|
5
|
-
export { normalizeToolSchema } from "./schema.js";
|
|
5
|
+
export { extractSchemaDescriptor, normalizeArgsBySchema, normalizeToolSchema } from "./schema.js";
|
|
6
6
|
export { reliableToolCalls } from "./reliable.js";
|
|
7
7
|
export { BetterToolValidationError, betterTools } from "./better-tool.js";
|
|
8
8
|
export type { BetterToolLike, BetterToolsOptions } from "./better-tool.js";
|
|
9
|
-
export type { GuardPolicy, GuardResult, IssueKind, JsonSchema, ReliableToolCallsInput, ReliableToolCallsResult, RepairFunction, RepairInput, SemanticValidator, ToolCall, ToolCallIssue, ToolDefinition, ToolSchema, } from "./types.js";
|
|
9
|
+
export type { GuardPolicy, GuardResult, IssueKind, JsonSchema, ArgsNormalizationOptions, ArgsNormalizationResult, ReliableToolCallsInput, ReliableToolCallsResult, RepairDiagnostics, RepairFunction, RepairInput, RepairPolicy, RepairProposal, SchemaDescriptor, SemanticValidator, ToolCall, ToolCallIssue, ToolDefinition, ToolSchema, } from "./types.js";
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { guardToolCalls } from "./guard.js";
|
|
2
2
|
export { buildRepairPrompt, buildReviewPrompt } from "./prompts.js";
|
|
3
3
|
export { defaultRepair } from "./default-repair.js";
|
|
4
|
-
export { normalizeToolSchema } from "./schema.js";
|
|
4
|
+
export { extractSchemaDescriptor, normalizeArgsBySchema, normalizeToolSchema } from "./schema.js";
|
|
5
5
|
export { reliableToolCalls } from "./reliable.js";
|
|
6
6
|
export { BetterToolValidationError, betterTools } from "./better-tool.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/reliable.js
CHANGED
|
@@ -1,26 +1,131 @@
|
|
|
1
1
|
import { guardToolCalls } from "./guard.js";
|
|
2
|
-
import { normalizeToolSchema } from "./schema.js";
|
|
2
|
+
import { normalizeArgsBySchema, normalizeToolSchema } from "./schema.js";
|
|
3
3
|
export async function reliableToolCalls(input) {
|
|
4
4
|
const mode = input.mode ?? "repair";
|
|
5
5
|
const tools = normalizeTools(input.tools);
|
|
6
6
|
const first = await guardToolCalls({ ...input, tools });
|
|
7
|
-
const
|
|
7
|
+
const diagnostics = [];
|
|
8
|
+
let repairBaseCalls = input.calls;
|
|
9
|
+
let repairBaseIssues = first.issues;
|
|
10
|
+
if (mode === "repair" && !first.ok) {
|
|
11
|
+
const schemaRepair = await proposeSchemaRepair(input.calls, tools, first.issues, input.repairPolicy);
|
|
12
|
+
if (schemaRepair) {
|
|
13
|
+
const accepted = await acceptProposal(schemaRepair, input.repairPolicy);
|
|
14
|
+
if (accepted && schemaRepair.issuesAfter.length === 0) {
|
|
15
|
+
return {
|
|
16
|
+
ok: true,
|
|
17
|
+
calls: schemaRepair.proposed,
|
|
18
|
+
issues: [],
|
|
19
|
+
repaired: true,
|
|
20
|
+
original: input.calls,
|
|
21
|
+
diagnostics: [schemaRepair.diagnostics],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (accepted) {
|
|
25
|
+
diagnostics.push(schemaRepair.diagnostics);
|
|
26
|
+
repairBaseCalls = schemaRepair.proposed;
|
|
27
|
+
repairBaseIssues = schemaRepair.issuesAfter;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const allowModelRepair = input.repairPolicy?.allowModelRepair ?? true;
|
|
32
|
+
const repairSource = input.repairSource ?? "custom";
|
|
33
|
+
const repairAllowed = repairSource === "model" ? allowModelRepair : true;
|
|
34
|
+
const shouldRepair = repairAllowed && Boolean(input.repair) && (mode === "review" || (mode === "repair" && !first.ok));
|
|
8
35
|
if (!shouldRepair)
|
|
9
|
-
return { ...first, repaired: false, original: input.calls };
|
|
36
|
+
return { ...first, repaired: false, original: input.calls, diagnostics };
|
|
10
37
|
const repairedCalls = await input.repair({
|
|
11
38
|
userInput: input.userInput,
|
|
12
39
|
tools,
|
|
13
|
-
calls:
|
|
14
|
-
issues:
|
|
40
|
+
calls: repairBaseCalls,
|
|
41
|
+
issues: repairBaseIssues,
|
|
15
42
|
});
|
|
16
43
|
const second = await guardToolCalls({ ...input, tools, calls: normalizeCalls(repairedCalls) });
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
:
|
|
44
|
+
const modelDiagnostics = createDiagnostics(repairSource, repairBaseCalls, second.calls, repairBaseIssues, second.issues);
|
|
45
|
+
const modelProposal = {
|
|
46
|
+
source: modelDiagnostics.source,
|
|
47
|
+
original: repairBaseCalls,
|
|
48
|
+
proposed: second.calls,
|
|
49
|
+
diagnostics: modelDiagnostics,
|
|
50
|
+
issuesBefore: repairBaseIssues,
|
|
51
|
+
issuesAfter: second.issues,
|
|
52
|
+
};
|
|
53
|
+
if (second.ok && await acceptProposal(modelProposal, input.repairPolicy)) {
|
|
54
|
+
return { ...second, repaired: true, original: input.calls, diagnostics: [...diagnostics, modelDiagnostics] };
|
|
55
|
+
}
|
|
56
|
+
return { ...first, repaired: false, original: input.calls, diagnostics };
|
|
20
57
|
}
|
|
21
58
|
function normalizeTools(tools) {
|
|
22
59
|
return tools.map((tool) => ({ ...tool, schema: normalizeToolSchema(tool.schema) }));
|
|
23
60
|
}
|
|
61
|
+
async function proposeSchemaRepair(calls, tools, issuesBefore, policy) {
|
|
62
|
+
if (!hasSchemaRepairPolicy(policy))
|
|
63
|
+
return undefined;
|
|
64
|
+
const changedPaths = [];
|
|
65
|
+
const proposed = calls.map((call, index) => {
|
|
66
|
+
const tool = tools.find((item) => item.name === call.tool);
|
|
67
|
+
if (!tool)
|
|
68
|
+
return call;
|
|
69
|
+
const normalized = normalizeArgsBySchema(tool.schema, call.args, policy);
|
|
70
|
+
changedPaths.push(...normalized.changedPaths.map((path) => path.replace("$", `$.calls[${index}].args`)));
|
|
71
|
+
return normalized.changedPaths.length > 0 ? { ...call, args: normalized.args } : call;
|
|
72
|
+
});
|
|
73
|
+
if (changedPaths.length === 0)
|
|
74
|
+
return undefined;
|
|
75
|
+
const after = await guardToolCalls({ tools, calls: proposed });
|
|
76
|
+
const diagnostics = {
|
|
77
|
+
source: "schema",
|
|
78
|
+
changedPaths,
|
|
79
|
+
repairReason: "schema-derived argument normalization",
|
|
80
|
+
confidence: 1,
|
|
81
|
+
issuesBefore,
|
|
82
|
+
issuesAfter: after.issues,
|
|
83
|
+
};
|
|
84
|
+
return {
|
|
85
|
+
source: "schema",
|
|
86
|
+
original: calls,
|
|
87
|
+
proposed,
|
|
88
|
+
diagnostics,
|
|
89
|
+
issuesBefore: issuesBefore ?? [],
|
|
90
|
+
issuesAfter: after.issues,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function hasSchemaRepairPolicy(policy) {
|
|
94
|
+
return Boolean(policy?.allowCoercion ||
|
|
95
|
+
policy?.allowClamp ||
|
|
96
|
+
policy?.allowDropUnknownKeys ||
|
|
97
|
+
policy?.allowArrayStringSplit);
|
|
98
|
+
}
|
|
99
|
+
async function acceptProposal(proposal, policy) {
|
|
100
|
+
return policy?.onProposedRepair ? policy.onProposedRepair(proposal) : true;
|
|
101
|
+
}
|
|
102
|
+
function createDiagnostics(source, original, proposed, issuesBefore, issuesAfter) {
|
|
103
|
+
return {
|
|
104
|
+
source,
|
|
105
|
+
changedPaths: diffCallPaths(original, proposed),
|
|
106
|
+
repairReason: source === "schema" ? "schema-derived argument normalization" : "repair function proposal",
|
|
107
|
+
issuesBefore,
|
|
108
|
+
issuesAfter,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function diffCallPaths(original, proposed) {
|
|
112
|
+
const paths = [];
|
|
113
|
+
for (let index = 0; index < Math.max(original.length, proposed.length); index += 1) {
|
|
114
|
+
const before = original[index];
|
|
115
|
+
const after = proposed[index];
|
|
116
|
+
if (!before || !after) {
|
|
117
|
+
paths.push(`$.calls[${index}]`);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (before.tool !== after.tool)
|
|
121
|
+
paths.push(`$.calls[${index}].tool`);
|
|
122
|
+
for (const key of new Set([...Object.keys(before.args), ...Object.keys(after.args)])) {
|
|
123
|
+
if (!Object.is(before.args[key], after.args[key]))
|
|
124
|
+
paths.push(`$.calls[${index}].args.${key}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return paths;
|
|
128
|
+
}
|
|
24
129
|
function normalizeCalls(calls) {
|
|
25
130
|
return calls.filter((call) => call && typeof call.tool === "string" && isRecord(call.args));
|
|
26
131
|
}
|
package/dist/reliable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reliable.js","sourceRoot":"","sources":["../src/reliable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"reliable.js","sourceRoot":"","sources":["../src/reliable.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import type { JsonSchema, ToolCallIssue, ToolSchema } from "./types.js";
|
|
1
|
+
import type { ArgsNormalizationOptions, ArgsNormalizationResult, JsonSchema, SchemaDescriptor, ToolCallIssue, ToolSchema } from "./types.js";
|
|
2
2
|
export declare function normalizeToolSchema(schema: ToolSchema | unknown): JsonSchema | undefined;
|
|
3
|
+
export declare function extractSchemaDescriptor(schema: ToolSchema | unknown): SchemaDescriptor | undefined;
|
|
4
|
+
export declare function normalizeArgsBySchema(schema: ToolSchema | unknown, args: Record<string, unknown>, options?: ArgsNormalizationOptions): ArgsNormalizationResult;
|
|
3
5
|
export declare function validateSchema(schema: JsonSchema | undefined, value: unknown, path?: string): ToolCallIssue[];
|
package/dist/schema.js
CHANGED
|
@@ -8,6 +8,18 @@ export function normalizeToolSchema(schema) {
|
|
|
8
8
|
return schema;
|
|
9
9
|
return undefined;
|
|
10
10
|
}
|
|
11
|
+
export function extractSchemaDescriptor(schema) {
|
|
12
|
+
const normalized = normalizeToolSchema(schema);
|
|
13
|
+
return normalized ? describeJsonSchema(normalized) : undefined;
|
|
14
|
+
}
|
|
15
|
+
export function normalizeArgsBySchema(schema, args, options = {}) {
|
|
16
|
+
const normalized = normalizeToolSchema(schema);
|
|
17
|
+
if (!normalized || !isObjectSchema(normalized))
|
|
18
|
+
return { args, changedPaths: [] };
|
|
19
|
+
const changedPaths = [];
|
|
20
|
+
const next = normalizeObjectArgs(normalized, args, "$", options, changedPaths);
|
|
21
|
+
return { args: next, changedPaths };
|
|
22
|
+
}
|
|
11
23
|
export function validateSchema(schema, value, path = "$") {
|
|
12
24
|
if (!schema)
|
|
13
25
|
return [];
|
|
@@ -52,6 +64,120 @@ function validateObject(schema, value, path) {
|
|
|
52
64
|
}
|
|
53
65
|
return issues;
|
|
54
66
|
}
|
|
67
|
+
function describeJsonSchema(schema) {
|
|
68
|
+
const descriptor = {
|
|
69
|
+
type: schema.type,
|
|
70
|
+
enum: schema.enum,
|
|
71
|
+
additionalProperties: schema.additionalProperties,
|
|
72
|
+
};
|
|
73
|
+
if (includesType(schema.type, "integer"))
|
|
74
|
+
descriptor.integer = true;
|
|
75
|
+
if (schema.items)
|
|
76
|
+
descriptor.items = describeJsonSchema(schema.items);
|
|
77
|
+
if (isRecord(schema)) {
|
|
78
|
+
const maybeMinimum = schema.minimum;
|
|
79
|
+
const maybeMaximum = schema.maximum;
|
|
80
|
+
const maybeExclusiveMinimum = schema.exclusiveMinimum;
|
|
81
|
+
const maybeExclusiveMaximum = schema.exclusiveMaximum;
|
|
82
|
+
if (typeof maybeMinimum === "number")
|
|
83
|
+
descriptor.minimum = maybeMinimum;
|
|
84
|
+
if (typeof maybeMaximum === "number")
|
|
85
|
+
descriptor.maximum = maybeMaximum;
|
|
86
|
+
if (typeof maybeExclusiveMinimum === "number")
|
|
87
|
+
descriptor.minimum = maybeExclusiveMinimum;
|
|
88
|
+
if (typeof maybeExclusiveMaximum === "number")
|
|
89
|
+
descriptor.maximum = maybeExclusiveMaximum;
|
|
90
|
+
if (schema.format === "finite")
|
|
91
|
+
descriptor.finite = true;
|
|
92
|
+
if (Array.isArray(schema.anyOf) || Array.isArray(schema.oneOf)) {
|
|
93
|
+
for (const item of [...(schema.anyOf ?? []), ...(schema.oneOf ?? [])]) {
|
|
94
|
+
if (isRecord(item) && item.type === "null")
|
|
95
|
+
descriptor.nullable = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (isObjectSchema(schema)) {
|
|
100
|
+
descriptor.required = schema.required ?? [];
|
|
101
|
+
descriptor.properties = Object.fromEntries(Object.entries(schema.properties ?? {}).map(([key, property]) => [key, {
|
|
102
|
+
...describeJsonSchema(property),
|
|
103
|
+
optional: !(schema.required ?? []).includes(key),
|
|
104
|
+
}]));
|
|
105
|
+
}
|
|
106
|
+
return descriptor;
|
|
107
|
+
}
|
|
108
|
+
function normalizeObjectArgs(schema, args, path, options, changedPaths) {
|
|
109
|
+
let next = { ...args };
|
|
110
|
+
const properties = schema.properties ?? {};
|
|
111
|
+
if (options.allowDropUnknownKeys && schema.additionalProperties === false) {
|
|
112
|
+
for (const key of Object.keys(next)) {
|
|
113
|
+
if (!(key in properties)) {
|
|
114
|
+
delete next[key];
|
|
115
|
+
addChangedPath(changedPaths, `${path}.${key}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
for (const [key, property] of Object.entries(properties)) {
|
|
120
|
+
if (!(key in next))
|
|
121
|
+
continue;
|
|
122
|
+
const before = next[key];
|
|
123
|
+
const after = normalizeValueBySchema(property, before, `${path}.${key}`, options, changedPaths);
|
|
124
|
+
if (after !== before)
|
|
125
|
+
next = { ...next, [key]: after };
|
|
126
|
+
}
|
|
127
|
+
return next;
|
|
128
|
+
}
|
|
129
|
+
function normalizeValueBySchema(schema, value, path, options, changedPaths) {
|
|
130
|
+
let next = value;
|
|
131
|
+
if (options.allowArrayStringSplit && schema.type === "array" && schema.items?.type === "string" && typeof next === "string") {
|
|
132
|
+
next = splitShellLikeString(next);
|
|
133
|
+
addChangedPath(changedPaths, path);
|
|
134
|
+
}
|
|
135
|
+
if (options.allowCoercion && expectsNumber(schema) && typeof next === "string" && next.trim() !== "") {
|
|
136
|
+
const numeric = Number(next);
|
|
137
|
+
if (Number.isFinite(numeric)) {
|
|
138
|
+
next = numeric;
|
|
139
|
+
addChangedPath(changedPaths, path);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (options.allowCoercion && expectsInteger(schema) && typeof next === "number" && Number.isFinite(next)) {
|
|
143
|
+
const integer = Math.trunc(next);
|
|
144
|
+
if (integer !== next && Math.abs(next - integer) < Number.EPSILON * 100) {
|
|
145
|
+
next = integer;
|
|
146
|
+
addChangedPath(changedPaths, path);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (options.allowClamp && typeof next === "number" && Number.isFinite(next)) {
|
|
150
|
+
const minimum = readNumber(schema, "minimum");
|
|
151
|
+
const maximum = readNumber(schema, "maximum");
|
|
152
|
+
const clamped = Math.min(maximum ?? next, Math.max(minimum ?? next, next));
|
|
153
|
+
if (clamped !== next) {
|
|
154
|
+
next = clamped;
|
|
155
|
+
addChangedPath(changedPaths, path);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (isObjectSchema(schema) && isRecord(next)) {
|
|
159
|
+
return normalizeObjectArgs(schema, next, path, options, changedPaths);
|
|
160
|
+
}
|
|
161
|
+
return next;
|
|
162
|
+
}
|
|
163
|
+
function expectsNumber(schema) {
|
|
164
|
+
return includesType(schema.type, "number") || includesType(schema.type, "integer");
|
|
165
|
+
}
|
|
166
|
+
function expectsInteger(schema) {
|
|
167
|
+
return includesType(schema.type, "integer");
|
|
168
|
+
}
|
|
169
|
+
function readNumber(schema, key) {
|
|
170
|
+
const value = schema[key];
|
|
171
|
+
return typeof value === "number" ? value : undefined;
|
|
172
|
+
}
|
|
173
|
+
function splitShellLikeString(value) {
|
|
174
|
+
const result = value.match(/"([^"]*)"|'([^']*)'|[^\s]+/gu) ?? [];
|
|
175
|
+
return result.map((item) => item.replace(/^["']|["']$/gu, ""));
|
|
176
|
+
}
|
|
177
|
+
function addChangedPath(paths, path) {
|
|
178
|
+
if (!paths.includes(path))
|
|
179
|
+
paths.push(path);
|
|
180
|
+
}
|
|
55
181
|
function isObjectSchema(schema) {
|
|
56
182
|
return includesType(schema.type, "object") || Boolean(schema.properties);
|
|
57
183
|
}
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,8 +6,29 @@ export type JsonSchema = {
|
|
|
6
6
|
enum?: unknown[];
|
|
7
7
|
items?: JsonSchema;
|
|
8
8
|
additionalProperties?: boolean;
|
|
9
|
+
minimum?: number;
|
|
10
|
+
maximum?: number;
|
|
11
|
+
exclusiveMinimum?: number;
|
|
12
|
+
exclusiveMaximum?: number;
|
|
13
|
+
format?: string;
|
|
14
|
+
anyOf?: JsonSchema[];
|
|
15
|
+
oneOf?: JsonSchema[];
|
|
9
16
|
};
|
|
10
17
|
export type ToolSchema = JsonSchema | z.ZodType | z.ZodRawShape;
|
|
18
|
+
export type SchemaDescriptor = {
|
|
19
|
+
type?: string | string[];
|
|
20
|
+
optional?: boolean;
|
|
21
|
+
nullable?: boolean;
|
|
22
|
+
enum?: unknown[];
|
|
23
|
+
minimum?: number;
|
|
24
|
+
maximum?: number;
|
|
25
|
+
integer?: boolean;
|
|
26
|
+
finite?: boolean;
|
|
27
|
+
items?: SchemaDescriptor;
|
|
28
|
+
properties?: Record<string, SchemaDescriptor>;
|
|
29
|
+
required?: string[];
|
|
30
|
+
additionalProperties?: boolean;
|
|
31
|
+
};
|
|
11
32
|
export type ToolDefinition = {
|
|
12
33
|
name: string;
|
|
13
34
|
description?: string;
|
|
@@ -31,6 +52,36 @@ export type GuardPolicy = {
|
|
|
31
52
|
expected?: "any" | "none" | "some";
|
|
32
53
|
allowUnknownTools?: boolean;
|
|
33
54
|
};
|
|
55
|
+
export type ArgsNormalizationOptions = {
|
|
56
|
+
allowCoercion?: boolean;
|
|
57
|
+
allowClamp?: boolean;
|
|
58
|
+
allowDropUnknownKeys?: boolean;
|
|
59
|
+
allowArrayStringSplit?: boolean;
|
|
60
|
+
};
|
|
61
|
+
export type ArgsNormalizationResult = {
|
|
62
|
+
args: Record<string, unknown>;
|
|
63
|
+
changedPaths: string[];
|
|
64
|
+
};
|
|
65
|
+
export type RepairDiagnostics = {
|
|
66
|
+
changedPaths: string[];
|
|
67
|
+
repairReason?: string;
|
|
68
|
+
source: "schema" | "model" | "custom";
|
|
69
|
+
confidence?: number;
|
|
70
|
+
issuesBefore?: ToolCallIssue[];
|
|
71
|
+
issuesAfter?: ToolCallIssue[];
|
|
72
|
+
};
|
|
73
|
+
export type RepairProposal = {
|
|
74
|
+
source: RepairDiagnostics["source"];
|
|
75
|
+
original: ToolCall[];
|
|
76
|
+
proposed: ToolCall[];
|
|
77
|
+
diagnostics: RepairDiagnostics;
|
|
78
|
+
issuesBefore: ToolCallIssue[];
|
|
79
|
+
issuesAfter: ToolCallIssue[];
|
|
80
|
+
};
|
|
81
|
+
export type RepairPolicy = ArgsNormalizationOptions & {
|
|
82
|
+
allowModelRepair?: boolean;
|
|
83
|
+
onProposedRepair?: (proposal: RepairProposal) => Promise<boolean> | boolean;
|
|
84
|
+
};
|
|
34
85
|
export type GuardResult = {
|
|
35
86
|
ok: boolean;
|
|
36
87
|
calls: ToolCall[];
|
|
@@ -52,10 +103,13 @@ export type ReliableToolCallsInput = {
|
|
|
52
103
|
tools: ToolDefinition[];
|
|
53
104
|
calls: ToolCall[];
|
|
54
105
|
policy?: GuardPolicy;
|
|
106
|
+
repairPolicy?: RepairPolicy;
|
|
55
107
|
repair?: RepairFunction;
|
|
108
|
+
repairSource?: "model" | "custom";
|
|
56
109
|
mode?: "guard" | "repair" | "review";
|
|
57
110
|
};
|
|
58
111
|
export type ReliableToolCallsResult = GuardResult & {
|
|
59
112
|
repaired: boolean;
|
|
60
113
|
original: ToolCall[];
|
|
114
|
+
diagnostics?: RepairDiagnostics[];
|
|
61
115
|
};
|