@bolt-foundry/gambit-core 0.7.0 → 0.8.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.
- package/README.md +228 -0
- package/cards/context.card.md +9 -0
- package/cards/end.card.md +10 -0
- package/cards/respond.card.md +10 -0
- package/esm/_dnt.polyfills.d.ts +99 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -1
- package/esm/_dnt.polyfills.js +127 -1
- package/esm/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
- package/esm/mod.d.ts +26 -2
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +0 -2
- package/esm/src/builtins.d.ts +3 -0
- package/esm/src/builtins.d.ts.map +1 -0
- package/esm/src/builtins.js +26 -0
- package/esm/src/loader.d.ts.map +1 -1
- package/esm/src/loader.js +6 -3
- package/esm/src/markdown.d.ts.map +1 -1
- package/esm/src/markdown.js +25 -4
- package/esm/src/openai_compat.d.ts.map +1 -1
- package/esm/src/openai_compat.js +92 -25
- package/esm/src/openresponses.d.ts +6 -0
- package/esm/src/openresponses.d.ts.map +1 -0
- package/esm/src/openresponses.js +75 -0
- package/esm/src/runtime.d.ts.map +1 -1
- package/esm/src/runtime.js +139 -35
- package/esm/src/state.d.ts +4 -3
- package/esm/src/state.d.ts.map +1 -1
- package/esm/src/types.d.ts +306 -33
- package/esm/src/types.d.ts.map +1 -1
- package/package.json +1 -2
- package/schemas/graders/contexts/conversation.ts +17 -0
- package/schemas/graders/contexts/turn.ts +10 -0
- package/schemas/graders/respond.ts +9 -0
- package/script/_dnt.polyfills.d.ts +99 -0
- package/script/_dnt.polyfills.d.ts.map +1 -1
- package/script/_dnt.polyfills.js +128 -0
- package/script/deps/jsr.io/@std/path/1.1.4/constants.d.ts +1 -1
- package/script/mod.d.ts +26 -2
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +1 -4
- package/script/src/builtins.d.ts +3 -0
- package/script/src/builtins.d.ts.map +1 -0
- package/script/src/builtins.js +63 -0
- package/script/src/loader.d.ts.map +1 -1
- package/script/src/loader.js +6 -3
- package/script/src/markdown.d.ts.map +1 -1
- package/script/src/markdown.js +25 -4
- package/script/src/openai_compat.d.ts.map +1 -1
- package/script/src/openai_compat.js +92 -25
- package/script/src/openresponses.d.ts +6 -0
- package/script/src/openresponses.d.ts.map +1 -0
- package/script/src/openresponses.js +81 -0
- package/script/src/runtime.d.ts.map +1 -1
- package/script/src/runtime.js +139 -35
- package/script/src/state.d.ts +4 -3
- package/script/src/state.d.ts.map +1 -1
- package/script/src/types.d.ts +306 -33
- package/script/src/types.d.ts.map +1 -1
- package/esm/src/providers/openrouter.d.ts +0 -8
- package/esm/src/providers/openrouter.d.ts.map +0 -1
- package/esm/src/providers/openrouter.js +0 -168
- package/script/src/providers/openrouter.d.ts +0 -8
- package/script/src/providers/openrouter.d.ts.map +0 -1
- package/script/src/providers/openrouter.js +0 -207
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.createOpenRouterProvider = createOpenRouterProvider;
|
|
40
|
-
const dntShim = __importStar(require("../../_dnt.shims.js"));
|
|
41
|
-
const openai_1 = __importDefault(require("openai"));
|
|
42
|
-
const logger = console;
|
|
43
|
-
function normalizeMessage(content) {
|
|
44
|
-
const toolCalls = content.tool_calls ??
|
|
45
|
-
undefined;
|
|
46
|
-
return {
|
|
47
|
-
role: content.role,
|
|
48
|
-
content: typeof content.content === "string"
|
|
49
|
-
? content.content
|
|
50
|
-
: Array.isArray(content.content)
|
|
51
|
-
? content.content
|
|
52
|
-
.map((c) => (typeof c === "string" ? c : ""))
|
|
53
|
-
.join("")
|
|
54
|
-
: "",
|
|
55
|
-
name: content.name,
|
|
56
|
-
tool_call_id: content.tool_call_id,
|
|
57
|
-
tool_calls: toolCalls && toolCalls.length > 0 ? toolCalls : undefined,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
function createOpenRouterProvider(opts) {
|
|
61
|
-
const debugStream = dntShim.Deno.env.get("GAMBIT_DEBUG_STREAM") === "1";
|
|
62
|
-
const client = new openai_1.default({
|
|
63
|
-
apiKey: opts.apiKey,
|
|
64
|
-
baseURL: opts.baseURL ?? "https://openrouter.ai/api/v1",
|
|
65
|
-
defaultHeaders: {
|
|
66
|
-
"HTTP-Referer": opts.referer ?? "https://gambit.local",
|
|
67
|
-
"X-Title": opts.title ?? "Gambit CLI",
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
return {
|
|
71
|
-
async chat(input) {
|
|
72
|
-
const params = input.params ?? {};
|
|
73
|
-
if (input.stream) {
|
|
74
|
-
if (debugStream) {
|
|
75
|
-
logger.log(`[stream-debug] requesting stream model=${input.model} messages=${input.messages.length} tools=${input.tools?.length ?? 0}`);
|
|
76
|
-
}
|
|
77
|
-
const stream = await client.chat.completions.create({
|
|
78
|
-
model: input.model,
|
|
79
|
-
messages: input
|
|
80
|
-
.messages,
|
|
81
|
-
tools: input
|
|
82
|
-
.tools,
|
|
83
|
-
tool_choice: "auto",
|
|
84
|
-
stream: true,
|
|
85
|
-
...params,
|
|
86
|
-
});
|
|
87
|
-
let finishReason = null;
|
|
88
|
-
const contentParts = [];
|
|
89
|
-
const toolCallMap = new Map();
|
|
90
|
-
let chunkCount = 0;
|
|
91
|
-
let streamedChars = 0;
|
|
92
|
-
for await (const chunk of stream) {
|
|
93
|
-
chunkCount++;
|
|
94
|
-
const choice = chunk.choices[0];
|
|
95
|
-
const fr = choice.finish_reason;
|
|
96
|
-
if (fr === "stop" || fr === "tool_calls" || fr === "length" ||
|
|
97
|
-
fr === null) {
|
|
98
|
-
finishReason = fr ?? finishReason;
|
|
99
|
-
}
|
|
100
|
-
const delta = choice.delta;
|
|
101
|
-
if (typeof delta.content === "string") {
|
|
102
|
-
contentParts.push(delta.content);
|
|
103
|
-
input.onStreamText?.(delta.content);
|
|
104
|
-
streamedChars += delta.content.length;
|
|
105
|
-
}
|
|
106
|
-
else if (Array.isArray(delta.content)) {
|
|
107
|
-
const chunkStr = delta.content
|
|
108
|
-
.map((c) => (typeof c === "string" ? c : ""))
|
|
109
|
-
.join("");
|
|
110
|
-
if (chunkStr) {
|
|
111
|
-
contentParts.push(chunkStr);
|
|
112
|
-
input.onStreamText?.(chunkStr);
|
|
113
|
-
streamedChars += chunkStr.length;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
for (const tc of delta.tool_calls ?? []) {
|
|
117
|
-
const idx = tc.index ?? 0;
|
|
118
|
-
const existing = toolCallMap.get(idx) ??
|
|
119
|
-
{
|
|
120
|
-
id: tc.id,
|
|
121
|
-
function: { name: tc.function?.name, arguments: "" },
|
|
122
|
-
};
|
|
123
|
-
if (tc.id)
|
|
124
|
-
existing.id = tc.id;
|
|
125
|
-
if (tc.function?.name)
|
|
126
|
-
existing.function.name = tc.function.name;
|
|
127
|
-
if (tc.function?.arguments) {
|
|
128
|
-
existing.function.arguments += tc.function.arguments;
|
|
129
|
-
}
|
|
130
|
-
toolCallMap.set(idx, existing);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
if (debugStream) {
|
|
134
|
-
logger.log(`[stream-debug] completed stream chunks=${chunkCount} streamedChars=${streamedChars} finishReason=${finishReason}`);
|
|
135
|
-
}
|
|
136
|
-
const tool_calls = Array.from(toolCallMap.values()).map((tc) => ({
|
|
137
|
-
id: tc.id ?? crypto.randomUUID().replace(/-/g, "").slice(0, 24),
|
|
138
|
-
type: "function",
|
|
139
|
-
function: {
|
|
140
|
-
name: tc.function.name ?? "",
|
|
141
|
-
arguments: tc.function.arguments,
|
|
142
|
-
},
|
|
143
|
-
}));
|
|
144
|
-
const message = normalizeMessage({
|
|
145
|
-
role: "assistant",
|
|
146
|
-
content: contentParts.length ? contentParts.join("") : null,
|
|
147
|
-
tool_calls,
|
|
148
|
-
});
|
|
149
|
-
const toolCalls = tool_calls.length > 0
|
|
150
|
-
? tool_calls.map((tc) => ({
|
|
151
|
-
id: tc.id,
|
|
152
|
-
name: tc.function.name,
|
|
153
|
-
args: safeJson(tc.function.arguments),
|
|
154
|
-
}))
|
|
155
|
-
: undefined;
|
|
156
|
-
return {
|
|
157
|
-
message,
|
|
158
|
-
finishReason: finishReason ?? "stop",
|
|
159
|
-
toolCalls,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
const response = await client.chat.completions.create({
|
|
163
|
-
model: input.model,
|
|
164
|
-
messages: input
|
|
165
|
-
.messages,
|
|
166
|
-
tools: input
|
|
167
|
-
.tools,
|
|
168
|
-
tool_choice: "auto",
|
|
169
|
-
stream: false,
|
|
170
|
-
...params,
|
|
171
|
-
});
|
|
172
|
-
const choice = response.choices[0];
|
|
173
|
-
const message = choice.message;
|
|
174
|
-
const normalizedMessage = normalizeMessage(message);
|
|
175
|
-
const toolCalls = message.tool_calls?.map((tc) => ({
|
|
176
|
-
id: tc.id,
|
|
177
|
-
name: tc.function.name,
|
|
178
|
-
args: safeJson(tc.function.arguments),
|
|
179
|
-
}));
|
|
180
|
-
return {
|
|
181
|
-
message: normalizedMessage,
|
|
182
|
-
finishReason: choice.finish_reason ??
|
|
183
|
-
"stop",
|
|
184
|
-
toolCalls,
|
|
185
|
-
usage: response.usage
|
|
186
|
-
? {
|
|
187
|
-
promptTokens: response.usage.prompt_tokens ?? 0,
|
|
188
|
-
completionTokens: response.usage.completion_tokens ?? 0,
|
|
189
|
-
totalTokens: response.usage.total_tokens ?? 0,
|
|
190
|
-
}
|
|
191
|
-
: undefined,
|
|
192
|
-
};
|
|
193
|
-
},
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
function safeJson(str) {
|
|
197
|
-
try {
|
|
198
|
-
const parsed = JSON.parse(str);
|
|
199
|
-
if (parsed && typeof parsed === "object") {
|
|
200
|
-
return parsed;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
catch {
|
|
204
|
-
// ignore bad tool args
|
|
205
|
-
}
|
|
206
|
-
return {};
|
|
207
|
-
}
|