deepcode-ai 1.1.37 → 1.1.39
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/dist/index.js +83 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6049,6 +6049,8 @@ var OpenAICompatibleProvider = class {
|
|
|
6049
6049
|
extraHeaders;
|
|
6050
6050
|
normalizeModelId;
|
|
6051
6051
|
buildRequestBody;
|
|
6052
|
+
contentToolCallParser;
|
|
6053
|
+
contentToolCallMarker;
|
|
6052
6054
|
apiKeyOptional;
|
|
6053
6055
|
constructor(options) {
|
|
6054
6056
|
this.id = options.id;
|
|
@@ -6059,6 +6061,8 @@ var OpenAICompatibleProvider = class {
|
|
|
6059
6061
|
this.extraHeaders = options.extraHeaders ?? {};
|
|
6060
6062
|
this.normalizeModelId = options.normalizeModelId;
|
|
6061
6063
|
this.buildRequestBody = options.buildRequestBody;
|
|
6064
|
+
this.contentToolCallParser = options.contentToolCallParser;
|
|
6065
|
+
this.contentToolCallMarker = options.contentToolCallMarker;
|
|
6062
6066
|
this.apiKeyOptional = options.apiKeyOptional ?? false;
|
|
6063
6067
|
}
|
|
6064
6068
|
async *chat(messages, options) {
|
|
@@ -6092,6 +6096,8 @@ var OpenAICompatibleProvider = class {
|
|
|
6092
6096
|
await this.assertOk(response);
|
|
6093
6097
|
const pendingTools = /* @__PURE__ */ new Map();
|
|
6094
6098
|
let lastUsage = null;
|
|
6099
|
+
const bufferAllContent = Boolean(this.contentToolCallParser);
|
|
6100
|
+
let bufferedContent = "";
|
|
6095
6101
|
for await (const event of parseSse(response)) {
|
|
6096
6102
|
const streamError = getOpenAICompatibleStreamError(event);
|
|
6097
6103
|
if (streamError) {
|
|
@@ -6103,7 +6109,11 @@ var OpenAICompatibleProvider = class {
|
|
|
6103
6109
|
const choice = event.choices?.[0];
|
|
6104
6110
|
const delta = choice?.delta;
|
|
6105
6111
|
if (delta?.content) {
|
|
6106
|
-
|
|
6112
|
+
if (bufferAllContent) {
|
|
6113
|
+
bufferedContent += delta.content;
|
|
6114
|
+
} else {
|
|
6115
|
+
yield { type: "delta", content: delta.content };
|
|
6116
|
+
}
|
|
6107
6117
|
}
|
|
6108
6118
|
if (typeof delta?.reasoning_content === "string" && delta.reasoning_content.length > 0) {
|
|
6109
6119
|
yield { type: "reasoning", content: delta.reasoning_content };
|
|
@@ -6142,6 +6152,23 @@ var OpenAICompatibleProvider = class {
|
|
|
6142
6152
|
};
|
|
6143
6153
|
}
|
|
6144
6154
|
}
|
|
6155
|
+
if (bufferAllContent && this.contentToolCallParser) {
|
|
6156
|
+
const marker = this.contentToolCallMarker;
|
|
6157
|
+
const likelyHasDsml = !marker || bufferedContent.includes(marker);
|
|
6158
|
+
const parsed = likelyHasDsml ? this.contentToolCallParser(bufferedContent) : null;
|
|
6159
|
+
if (parsed) {
|
|
6160
|
+
if (parsed.remainder) yield { type: "delta", content: parsed.remainder };
|
|
6161
|
+
for (let i = 0; i < parsed.toolCalls.length; i++) {
|
|
6162
|
+
const call = parsed.toolCalls[i];
|
|
6163
|
+
yield {
|
|
6164
|
+
type: "tool_call",
|
|
6165
|
+
call: { id: `dsml_${i}`, name: call.name, arguments: call.arguments }
|
|
6166
|
+
};
|
|
6167
|
+
}
|
|
6168
|
+
} else if (bufferedContent) {
|
|
6169
|
+
yield { type: "delta", content: bufferedContent };
|
|
6170
|
+
}
|
|
6171
|
+
}
|
|
6145
6172
|
for (const [index, call] of pendingTools) {
|
|
6146
6173
|
if (!call.name) continue;
|
|
6147
6174
|
yield {
|
|
@@ -6308,6 +6335,57 @@ function toOpenAICompatibleToolChoice(toolChoice) {
|
|
|
6308
6335
|
}
|
|
6309
6336
|
return toolChoice;
|
|
6310
6337
|
}
|
|
6338
|
+
var PIPE_PAT = "[\uFF5C|]{1,2}";
|
|
6339
|
+
var DSML_HINT = "DSML";
|
|
6340
|
+
var TOOL_CALLS_OPEN_RE = new RegExp(`<${PIPE_PAT}DSML${PIPE_PAT}tool_calls>`, "i");
|
|
6341
|
+
var TOOL_CALLS_CLOSE_RE = new RegExp(`<\\/${PIPE_PAT}DSML${PIPE_PAT}tool_calls>`, "i");
|
|
6342
|
+
var INVOKE_RE_SRC = `<${PIPE_PAT}DSML${PIPE_PAT}invoke name="([^"]+)">(.*?)<\\/${PIPE_PAT}DSML${PIPE_PAT}invoke>`;
|
|
6343
|
+
var PARAM_RE_SRC = `<${PIPE_PAT}DSML${PIPE_PAT}parameter name="([^"]+)"([^>]*)>(.*?)<\\/${PIPE_PAT}DSML${PIPE_PAT}parameter>`;
|
|
6344
|
+
function parseDSMLToolCalls(content) {
|
|
6345
|
+
const openMatch = TOOL_CALLS_OPEN_RE.exec(content);
|
|
6346
|
+
if (!openMatch) return null;
|
|
6347
|
+
const startIdx = openMatch.index;
|
|
6348
|
+
const blockStart = startIdx + openMatch[0].length;
|
|
6349
|
+
const closeMatch = TOOL_CALLS_CLOSE_RE.exec(content.slice(blockStart));
|
|
6350
|
+
if (!closeMatch) return null;
|
|
6351
|
+
const blockEnd = blockStart + closeMatch.index;
|
|
6352
|
+
const closeEnd = blockEnd + closeMatch[0].length;
|
|
6353
|
+
const remainder = (content.slice(0, startIdx) + content.slice(closeEnd)).trim();
|
|
6354
|
+
const block = content.slice(blockStart, blockEnd);
|
|
6355
|
+
const toolCalls = [];
|
|
6356
|
+
const invokeRe = new RegExp(INVOKE_RE_SRC, "gis");
|
|
6357
|
+
let invokeMatch;
|
|
6358
|
+
while ((invokeMatch = invokeRe.exec(block)) !== null) {
|
|
6359
|
+
const toolName = invokeMatch[1];
|
|
6360
|
+
const paramBlock = invokeMatch[2];
|
|
6361
|
+
const args = {};
|
|
6362
|
+
const paramRe = new RegExp(PARAM_RE_SRC, "gis");
|
|
6363
|
+
let paramMatch;
|
|
6364
|
+
while ((paramMatch = paramRe.exec(paramBlock)) !== null) {
|
|
6365
|
+
const paramName = paramMatch[1];
|
|
6366
|
+
const paramAttrs = paramMatch[2];
|
|
6367
|
+
const rawValue = paramMatch[3].trim();
|
|
6368
|
+
args[paramName] = coerceDSMLParam(rawValue, paramAttrs);
|
|
6369
|
+
}
|
|
6370
|
+
toolCalls.push({ name: toolName, arguments: args });
|
|
6371
|
+
}
|
|
6372
|
+
return { toolCalls, remainder };
|
|
6373
|
+
}
|
|
6374
|
+
function coerceDSMLParam(value, attrs) {
|
|
6375
|
+
if (/\bstring="true"/i.test(attrs)) return value;
|
|
6376
|
+
if (/\bnumber="true"/i.test(attrs)) {
|
|
6377
|
+
const n = Number(value);
|
|
6378
|
+
return Number.isNaN(n) ? value : n;
|
|
6379
|
+
}
|
|
6380
|
+
if (/\bboolean="true"/i.test(attrs)) {
|
|
6381
|
+
return value.toLowerCase() === "true";
|
|
6382
|
+
}
|
|
6383
|
+
try {
|
|
6384
|
+
return JSON.parse(value);
|
|
6385
|
+
} catch {
|
|
6386
|
+
return value;
|
|
6387
|
+
}
|
|
6388
|
+
}
|
|
6311
6389
|
var RETRYABLE_STATUS_CODES = /* @__PURE__ */ new Set([408, 429, 502, 503, 504]);
|
|
6312
6390
|
var MODEL_CATALOG_GRACE_MS = 250;
|
|
6313
6391
|
function isRetryableError(error) {
|
|
@@ -6368,7 +6446,9 @@ var ProviderManager = class {
|
|
|
6368
6446
|
buildRequestBody: (body, context) => ({
|
|
6369
6447
|
...body,
|
|
6370
6448
|
thinking: buildDeepSeekThinkingOverride(context.model)
|
|
6371
|
-
})
|
|
6449
|
+
}),
|
|
6450
|
+
contentToolCallParser: parseDSMLToolCalls,
|
|
6451
|
+
contentToolCallMarker: DSML_HINT
|
|
6372
6452
|
})
|
|
6373
6453
|
);
|
|
6374
6454
|
this.register(
|
|
@@ -28344,7 +28424,7 @@ function parseVersion2(version) {
|
|
|
28344
28424
|
if (!match) return null;
|
|
28345
28425
|
return [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
28346
28426
|
}
|
|
28347
|
-
var VERSION = "1.1.
|
|
28427
|
+
var VERSION = "1.1.39".length > 0 ? "1.1.39" : "0.0.0-dev";
|
|
28348
28428
|
var updateCommand = {
|
|
28349
28429
|
name: "update",
|
|
28350
28430
|
description: "Check published DeepCode versions",
|