@juspay/neurolink 12.38.1 → 12.39.1
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/CHANGELOG.md +2 -2
- package/README.md +1 -1
- package/dist/browser/neurolink.min.js +475 -473
- package/dist/constants/enums.d.ts +226 -0
- package/dist/constants/enums.js +246 -0
- package/dist/neurolink.js +6 -0
- package/dist/providers/catalog/above-dev.json +194 -0
- package/dist/providers/catalog/aiand.json +204 -0
- package/dist/providers/catalog/ambient.json +117 -0
- package/dist/providers/catalog/bee-heossi.json +174 -0
- package/dist/providers/catalog/charm-hyper.json +349 -0
- package/dist/providers/catalog/chutes.json +236 -0
- package/dist/providers/catalog/deepinfra.json +157 -0
- package/dist/providers/catalog/empiriolabs.json +143 -0
- package/dist/providers/catalog/featherless-ai.json +212 -0
- package/dist/providers/catalog/inco.json +196 -0
- package/dist/providers/catalog/index.generated.d.ts +1 -1
- package/dist/providers/catalog/index.generated.js +60 -0
- package/dist/providers/catalog/inference-net.json +172 -0
- package/dist/providers/catalog/koscompute.json +81 -0
- package/dist/providers/catalog/lilac.json +107 -0
- package/dist/providers/catalog/llmtech.json +63 -0
- package/dist/providers/catalog/moark.json +94 -0
- package/dist/providers/catalog/neuralwatt.json +179 -0
- package/dist/providers/catalog/ovhcloud.json +232 -0
- package/dist/providers/catalog/pareto-inference.json +74 -0
- package/dist/providers/catalog/sarvam.json +72 -0
- package/dist/providers/catalog/schema.d.ts +2 -2
- package/dist/providers/catalog/synthetic.json +205 -0
- package/dist/providers/googleAiStudio/client.js +687 -263
- package/dist/providers/googleNativeGemini3/utils.d.ts +44 -1
- package/dist/providers/googleNativeGemini3/utils.js +300 -1
- package/dist/types/providerCatalog.generated.d.ts +2 -2
- package/dist/types/providers.d.ts +80 -0
- package/docs-site/static/search-index.json +211 -4
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* This module extracts the functions that are duplicated between the two
|
|
9
9
|
* providers so they can share a single implementation.
|
|
10
10
|
*/
|
|
11
|
-
import type { GenerateStopReason, ThinkingConfig, AgenticLoopOptions, ChatMessage, CollectedChunkResult, MinimalChatMessage, NativeFunctionCall, NativeFunctionResponse, NativeToolDeclarationsResult, NativeToolsConfig, StreamChannel, VertexNativePart, GeminiMultimodalInput, MultimodalAudioEntry, MultimodalVideoEntry } from "../../types/index.js";
|
|
11
|
+
import type { GenerateStopReason, ThinkingConfig, AgenticLoopOptions, ChatMessage, CollectedChunkResult, MinimalChatMessage, NativeFunctionCall, NativeFunctionResponse, NativeToolDeclarationsResult, NativeToolsConfig, StreamChannel, VertexNativePart, GeminiMultimodalInput, MultimodalAudioEntry, MultimodalVideoEntry, ModelMessage } from "../../types/index.js";
|
|
12
12
|
import type { Tool, ToolExecutionGuards } from "../../types/index.js";
|
|
13
13
|
/**
|
|
14
14
|
* A per-turn tool execute map that deduplicates identical tool calls.
|
|
@@ -66,6 +66,13 @@ export declare function refreshNativeToolDeclarations(liveTools: Record<string,
|
|
|
66
66
|
*/
|
|
67
67
|
export declare function buildNativeConfig(options: {
|
|
68
68
|
temperature?: number;
|
|
69
|
+
/**
|
|
70
|
+
* Nucleus sampling. Subject to the same registry-driven
|
|
71
|
+
* sampling-param strip as `temperature` — a model that rejects
|
|
72
|
+
* classic sampling params (see `SAMPLING_PARAM_REJECTING_FAMILIES`)
|
|
73
|
+
* gets neither on the wire.
|
|
74
|
+
*/
|
|
75
|
+
topP?: number;
|
|
69
76
|
maxTokens?: number;
|
|
70
77
|
systemPrompt?: string;
|
|
71
78
|
/**
|
|
@@ -421,6 +428,42 @@ export declare function prependConversationMessages(contents: Array<{
|
|
|
421
428
|
role: string;
|
|
422
429
|
parts: unknown[];
|
|
423
430
|
}>, conversationMessages?: Array<ChatMessage | MinimalChatMessage>): void;
|
|
431
|
+
/**
|
|
432
|
+
* Convert a native Gemini `contents` array (the shape this module builds and
|
|
433
|
+
* `prependConversationMessages` emits) into the generic V3 prompt shape that
|
|
434
|
+
* caller model middleware operates on.
|
|
435
|
+
*
|
|
436
|
+
* Gemini has no wire-visible `system` role — `systemInstruction` rides
|
|
437
|
+
* separately on `config` — so this only ever emits `user` / `assistant` /
|
|
438
|
+
* `tool` messages. A `functionResponse`-only `user` entry becomes a V3
|
|
439
|
+
* `tool` message rather than `user`: `UserModelMessage.content` cannot carry
|
|
440
|
+
* a `ToolResultPart`, only `ToolModelMessage.content` can, and that grouping
|
|
441
|
+
* (a `model` turn of `functionCall` parts followed by a `user` turn of
|
|
442
|
+
* matching `functionResponse` parts) is exactly what
|
|
443
|
+
* `prependConversationMessages` above produces.
|
|
444
|
+
*/
|
|
445
|
+
export declare function geminiContentsToV3Prompt(contents: Array<{
|
|
446
|
+
role: string;
|
|
447
|
+
parts: unknown[];
|
|
448
|
+
}>): ModelMessage[];
|
|
449
|
+
/**
|
|
450
|
+
* Reverse of `geminiContentsToV3Prompt`: rebuild a native Gemini `contents`
|
|
451
|
+
* array from a (possibly middleware-rewritten) V3 prompt. A `system`
|
|
452
|
+
* message has no `contents` entry of its own — Gemini carries it on
|
|
453
|
+
* `config.systemInstruction` — so its text is returned separately
|
|
454
|
+
* (`systemText`) and the caller folds it into the request config.
|
|
455
|
+
*
|
|
456
|
+
* The synthesized `toolCallId` from the forward direction is intentionally
|
|
457
|
+
* discarded: Gemini pairs a call to its result by position, not by id, so
|
|
458
|
+
* reconstruction only needs `{name, args}` / `{name, response}`.
|
|
459
|
+
*/
|
|
460
|
+
export declare function v3PromptToGeminiContents(prompt: ModelMessage[]): {
|
|
461
|
+
contents: Array<{
|
|
462
|
+
role: string;
|
|
463
|
+
parts: unknown[];
|
|
464
|
+
}>;
|
|
465
|
+
systemText?: string;
|
|
466
|
+
};
|
|
424
467
|
/**
|
|
425
468
|
* Build the `parts` array for the current user turn of a Gemini native
|
|
426
469
|
* `generateContent` request, including inline image + PDF blobs.
|
|
@@ -422,12 +422,15 @@ export function refreshNativeToolDeclarations(liveTools, current) {
|
|
|
422
422
|
export function buildNativeConfig(options, toolsConfig) {
|
|
423
423
|
// Registry-driven sampling strip applied for uniformity with every other
|
|
424
424
|
// provider path (inert for current Gemini models).
|
|
425
|
-
const samplingParams = resolveSamplingParams("google-ai", options.model, { temperature: options.temperature ?? 1.0 }, // Gemini 3 requires 1.0 for tool calling
|
|
425
|
+
const samplingParams = resolveSamplingParams("google-ai", options.model, { temperature: options.temperature ?? 1.0, topP: options.topP }, // Gemini 3 requires 1.0 for tool calling
|
|
426
426
|
"googleAiStudio.buildNativeConfig");
|
|
427
427
|
const config = {
|
|
428
428
|
...(samplingParams.temperature !== undefined && {
|
|
429
429
|
temperature: samplingParams.temperature,
|
|
430
430
|
}),
|
|
431
|
+
...(samplingParams.topP !== undefined && {
|
|
432
|
+
topP: samplingParams.topP,
|
|
433
|
+
}),
|
|
431
434
|
maxOutputTokens: options.maxTokens,
|
|
432
435
|
};
|
|
433
436
|
if (toolsConfig) {
|
|
@@ -1306,6 +1309,302 @@ conversationMessages) {
|
|
|
1306
1309
|
}
|
|
1307
1310
|
}
|
|
1308
1311
|
}
|
|
1312
|
+
// ── Gemini contents ↔ V3 prompt conversion ──
|
|
1313
|
+
//
|
|
1314
|
+
// Caller model middleware (transformParams / wrapGenerate / wrapStream)
|
|
1315
|
+
// operates on the generic `ModelMessage[]` prompt shape, not on Gemini's
|
|
1316
|
+
// native `contents`. These two functions are the boundary: the native
|
|
1317
|
+
// stream/generate loops build `contents` exactly as they always have, hand
|
|
1318
|
+
// it through `geminiContentsToV3Prompt` before invoking middleware, and
|
|
1319
|
+
// rebuild `contents` from whatever prompt the middleware settled on via
|
|
1320
|
+
// `v3PromptToGeminiContents`.
|
|
1321
|
+
function hasTextField(part) {
|
|
1322
|
+
if (typeof part !== "object" || part === null || !("text" in part)) {
|
|
1323
|
+
return false;
|
|
1324
|
+
}
|
|
1325
|
+
return typeof part.text === "string";
|
|
1326
|
+
}
|
|
1327
|
+
function hasInlineDataField(part) {
|
|
1328
|
+
if (typeof part !== "object" || part === null || !("inlineData" in part)) {
|
|
1329
|
+
return false;
|
|
1330
|
+
}
|
|
1331
|
+
const inline = part.inlineData;
|
|
1332
|
+
return (typeof inline === "object" &&
|
|
1333
|
+
inline !== null &&
|
|
1334
|
+
"mimeType" in inline &&
|
|
1335
|
+
"data" in inline);
|
|
1336
|
+
}
|
|
1337
|
+
function hasFunctionCallField(part) {
|
|
1338
|
+
return typeof part === "object" && part !== null && "functionCall" in part;
|
|
1339
|
+
}
|
|
1340
|
+
function hasFunctionResponseField(part) {
|
|
1341
|
+
return (typeof part === "object" && part !== null && "functionResponse" in part);
|
|
1342
|
+
}
|
|
1343
|
+
function readThoughtSignature(part) {
|
|
1344
|
+
if (typeof part !== "object" ||
|
|
1345
|
+
part === null ||
|
|
1346
|
+
!("thoughtSignature" in part)) {
|
|
1347
|
+
return undefined;
|
|
1348
|
+
}
|
|
1349
|
+
return typeof part.thoughtSignature === "string"
|
|
1350
|
+
? part.thoughtSignature
|
|
1351
|
+
: undefined;
|
|
1352
|
+
}
|
|
1353
|
+
function withThoughtSignature(part, thoughtSignature) {
|
|
1354
|
+
if (!thoughtSignature) {
|
|
1355
|
+
return part;
|
|
1356
|
+
}
|
|
1357
|
+
return {
|
|
1358
|
+
...part,
|
|
1359
|
+
providerOptions: {
|
|
1360
|
+
...part.providerOptions,
|
|
1361
|
+
googleAiStudio: {
|
|
1362
|
+
...part.providerOptions?.googleAiStudio,
|
|
1363
|
+
thoughtSignature,
|
|
1364
|
+
},
|
|
1365
|
+
},
|
|
1366
|
+
};
|
|
1367
|
+
}
|
|
1368
|
+
function readProviderThoughtSignature(providerOptions) {
|
|
1369
|
+
if (typeof providerOptions !== "object" || providerOptions === null) {
|
|
1370
|
+
return undefined;
|
|
1371
|
+
}
|
|
1372
|
+
const studio = providerOptions.googleAiStudio;
|
|
1373
|
+
if (typeof studio !== "object" || studio === null) {
|
|
1374
|
+
return undefined;
|
|
1375
|
+
}
|
|
1376
|
+
const sig = studio.thoughtSignature;
|
|
1377
|
+
return typeof sig === "string" ? sig : undefined;
|
|
1378
|
+
}
|
|
1379
|
+
function isFunctionResponseOnlyEntry(parts) {
|
|
1380
|
+
return parts.length > 0 && parts.every(hasFunctionResponseField);
|
|
1381
|
+
}
|
|
1382
|
+
function toV3ToolResultPart(part) {
|
|
1383
|
+
if (!hasFunctionResponseField(part)) {
|
|
1384
|
+
return undefined;
|
|
1385
|
+
}
|
|
1386
|
+
return {
|
|
1387
|
+
type: "tool-result",
|
|
1388
|
+
// Gemini pairs a function response to its call by position, not by id —
|
|
1389
|
+
// nothing downstream of this conversion reads this value back.
|
|
1390
|
+
toolCallId: `gemini-tool-${randomUUID()}`,
|
|
1391
|
+
toolName: part.functionResponse.name,
|
|
1392
|
+
output: part.functionResponse.response,
|
|
1393
|
+
};
|
|
1394
|
+
}
|
|
1395
|
+
function toV3UserPart(part) {
|
|
1396
|
+
if (hasTextField(part)) {
|
|
1397
|
+
return withThoughtSignature({ type: "text", text: part.text }, readThoughtSignature(part));
|
|
1398
|
+
}
|
|
1399
|
+
if (hasInlineDataField(part)) {
|
|
1400
|
+
return {
|
|
1401
|
+
type: "file",
|
|
1402
|
+
data: part.inlineData.data,
|
|
1403
|
+
mediaType: part.inlineData.mimeType,
|
|
1404
|
+
};
|
|
1405
|
+
}
|
|
1406
|
+
return undefined;
|
|
1407
|
+
}
|
|
1408
|
+
function toV3AssistantPart(part) {
|
|
1409
|
+
if (hasTextField(part)) {
|
|
1410
|
+
return withThoughtSignature({ type: "text", text: part.text }, readThoughtSignature(part));
|
|
1411
|
+
}
|
|
1412
|
+
if (hasFunctionCallField(part)) {
|
|
1413
|
+
return withThoughtSignature({
|
|
1414
|
+
type: "tool-call",
|
|
1415
|
+
toolCallId: `gemini-tool-${randomUUID()}`,
|
|
1416
|
+
toolName: part.functionCall.name,
|
|
1417
|
+
input: part.functionCall.args ?? {},
|
|
1418
|
+
}, part.thoughtSignature);
|
|
1419
|
+
}
|
|
1420
|
+
return undefined;
|
|
1421
|
+
}
|
|
1422
|
+
/**
|
|
1423
|
+
* Convert a native Gemini `contents` array (the shape this module builds and
|
|
1424
|
+
* `prependConversationMessages` emits) into the generic V3 prompt shape that
|
|
1425
|
+
* caller model middleware operates on.
|
|
1426
|
+
*
|
|
1427
|
+
* Gemini has no wire-visible `system` role — `systemInstruction` rides
|
|
1428
|
+
* separately on `config` — so this only ever emits `user` / `assistant` /
|
|
1429
|
+
* `tool` messages. A `functionResponse`-only `user` entry becomes a V3
|
|
1430
|
+
* `tool` message rather than `user`: `UserModelMessage.content` cannot carry
|
|
1431
|
+
* a `ToolResultPart`, only `ToolModelMessage.content` can, and that grouping
|
|
1432
|
+
* (a `model` turn of `functionCall` parts followed by a `user` turn of
|
|
1433
|
+
* matching `functionResponse` parts) is exactly what
|
|
1434
|
+
* `prependConversationMessages` above produces.
|
|
1435
|
+
*/
|
|
1436
|
+
export function geminiContentsToV3Prompt(contents) {
|
|
1437
|
+
const messages = [];
|
|
1438
|
+
for (const entry of contents) {
|
|
1439
|
+
const parts = Array.isArray(entry.parts) ? entry.parts : [];
|
|
1440
|
+
if (entry.role === "user" && isFunctionResponseOnlyEntry(parts)) {
|
|
1441
|
+
const content = parts
|
|
1442
|
+
.map(toV3ToolResultPart)
|
|
1443
|
+
.filter((p) => p !== undefined);
|
|
1444
|
+
if (content.length > 0) {
|
|
1445
|
+
messages.push({ role: "tool", content });
|
|
1446
|
+
}
|
|
1447
|
+
continue;
|
|
1448
|
+
}
|
|
1449
|
+
if (entry.role === "user") {
|
|
1450
|
+
const content = parts
|
|
1451
|
+
.map(toV3UserPart)
|
|
1452
|
+
.filter((p) => p !== undefined);
|
|
1453
|
+
if (content.length > 0) {
|
|
1454
|
+
messages.push({ role: "user", content });
|
|
1455
|
+
}
|
|
1456
|
+
continue;
|
|
1457
|
+
}
|
|
1458
|
+
if (entry.role === "model") {
|
|
1459
|
+
const content = parts
|
|
1460
|
+
.map(toV3AssistantPart)
|
|
1461
|
+
.filter((p) => p !== undefined);
|
|
1462
|
+
if (content.length > 0) {
|
|
1463
|
+
messages.push({ role: "assistant", content });
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
return messages;
|
|
1468
|
+
}
|
|
1469
|
+
function dataContentToBase64(data) {
|
|
1470
|
+
if (typeof data === "string") {
|
|
1471
|
+
return data;
|
|
1472
|
+
}
|
|
1473
|
+
if (Buffer.isBuffer(data)) {
|
|
1474
|
+
return data.toString("base64");
|
|
1475
|
+
}
|
|
1476
|
+
if (data instanceof ArrayBuffer) {
|
|
1477
|
+
return Buffer.from(data).toString("base64");
|
|
1478
|
+
}
|
|
1479
|
+
return Buffer.from(data.buffer, data.byteOffset, data.byteLength).toString("base64");
|
|
1480
|
+
}
|
|
1481
|
+
function userContentToGeminiParts(content) {
|
|
1482
|
+
if (typeof content === "string") {
|
|
1483
|
+
return content.length > 0 ? [{ text: content }] : [];
|
|
1484
|
+
}
|
|
1485
|
+
const parts = [];
|
|
1486
|
+
for (const part of content) {
|
|
1487
|
+
if (part.type === "text") {
|
|
1488
|
+
if (part.text.length > 0) {
|
|
1489
|
+
const sig = readProviderThoughtSignature(part.providerOptions);
|
|
1490
|
+
parts.push(sig
|
|
1491
|
+
? { text: part.text, thoughtSignature: sig }
|
|
1492
|
+
: { text: part.text });
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1495
|
+
else if (part.type === "image" && !(part.image instanceof URL)) {
|
|
1496
|
+
parts.push({
|
|
1497
|
+
inlineData: {
|
|
1498
|
+
mimeType: part.mediaType ?? "application/octet-stream",
|
|
1499
|
+
data: dataContentToBase64(part.image),
|
|
1500
|
+
},
|
|
1501
|
+
});
|
|
1502
|
+
}
|
|
1503
|
+
else if (part.type === "file" && !(part.data instanceof URL)) {
|
|
1504
|
+
parts.push({
|
|
1505
|
+
inlineData: {
|
|
1506
|
+
mimeType: part.mediaType,
|
|
1507
|
+
data: dataContentToBase64(part.data),
|
|
1508
|
+
},
|
|
1509
|
+
});
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
return parts;
|
|
1513
|
+
}
|
|
1514
|
+
function assistantContentToGeminiParts(content) {
|
|
1515
|
+
if (typeof content === "string") {
|
|
1516
|
+
return content.length > 0 ? [{ text: content }] : [];
|
|
1517
|
+
}
|
|
1518
|
+
const parts = [];
|
|
1519
|
+
for (const part of content) {
|
|
1520
|
+
if (part.type === "text") {
|
|
1521
|
+
if (part.text.length > 0) {
|
|
1522
|
+
const sig = readProviderThoughtSignature(part.providerOptions);
|
|
1523
|
+
parts.push(sig
|
|
1524
|
+
? { text: part.text, thoughtSignature: sig }
|
|
1525
|
+
: { text: part.text });
|
|
1526
|
+
}
|
|
1527
|
+
}
|
|
1528
|
+
else if (part.type === "tool-call") {
|
|
1529
|
+
const sig = readProviderThoughtSignature(part.providerOptions);
|
|
1530
|
+
const call = {
|
|
1531
|
+
functionCall: {
|
|
1532
|
+
name: part.toolName,
|
|
1533
|
+
args: (part.input ?? {}),
|
|
1534
|
+
},
|
|
1535
|
+
};
|
|
1536
|
+
if (sig) {
|
|
1537
|
+
call.thoughtSignature = sig;
|
|
1538
|
+
}
|
|
1539
|
+
parts.push(call);
|
|
1540
|
+
}
|
|
1541
|
+
// `reasoning` / `file` / `tool-result` / `tool-approval-request` parts on
|
|
1542
|
+
// an assistant message have no native Gemini wire shape and are dropped
|
|
1543
|
+
// — this path never emitted them into `contents` before this conversion
|
|
1544
|
+
// existed either.
|
|
1545
|
+
}
|
|
1546
|
+
return parts;
|
|
1547
|
+
}
|
|
1548
|
+
function toolContentToGeminiParts(content) {
|
|
1549
|
+
const parts = [];
|
|
1550
|
+
for (const item of content) {
|
|
1551
|
+
if (item.type === "tool-result") {
|
|
1552
|
+
parts.push({
|
|
1553
|
+
functionResponse: {
|
|
1554
|
+
name: item.toolName,
|
|
1555
|
+
response: item.output && typeof item.output === "object"
|
|
1556
|
+
? item.output
|
|
1557
|
+
: { result: item.output },
|
|
1558
|
+
},
|
|
1559
|
+
});
|
|
1560
|
+
}
|
|
1561
|
+
}
|
|
1562
|
+
return parts;
|
|
1563
|
+
}
|
|
1564
|
+
/**
|
|
1565
|
+
* Reverse of `geminiContentsToV3Prompt`: rebuild a native Gemini `contents`
|
|
1566
|
+
* array from a (possibly middleware-rewritten) V3 prompt. A `system`
|
|
1567
|
+
* message has no `contents` entry of its own — Gemini carries it on
|
|
1568
|
+
* `config.systemInstruction` — so its text is returned separately
|
|
1569
|
+
* (`systemText`) and the caller folds it into the request config.
|
|
1570
|
+
*
|
|
1571
|
+
* The synthesized `toolCallId` from the forward direction is intentionally
|
|
1572
|
+
* discarded: Gemini pairs a call to its result by position, not by id, so
|
|
1573
|
+
* reconstruction only needs `{name, args}` / `{name, response}`.
|
|
1574
|
+
*/
|
|
1575
|
+
export function v3PromptToGeminiContents(prompt) {
|
|
1576
|
+
const contents = [];
|
|
1577
|
+
const systemChunks = [];
|
|
1578
|
+
for (const message of prompt) {
|
|
1579
|
+
if (message.role === "system") {
|
|
1580
|
+
if (message.content.length > 0) {
|
|
1581
|
+
systemChunks.push(message.content);
|
|
1582
|
+
}
|
|
1583
|
+
continue;
|
|
1584
|
+
}
|
|
1585
|
+
if (message.role === "user") {
|
|
1586
|
+
const parts = userContentToGeminiParts(message.content);
|
|
1587
|
+
if (parts.length > 0) {
|
|
1588
|
+
contents.push({ role: "user", parts });
|
|
1589
|
+
}
|
|
1590
|
+
continue;
|
|
1591
|
+
}
|
|
1592
|
+
if (message.role === "assistant") {
|
|
1593
|
+
const parts = assistantContentToGeminiParts(message.content);
|
|
1594
|
+
if (parts.length > 0) {
|
|
1595
|
+
contents.push({ role: "model", parts });
|
|
1596
|
+
}
|
|
1597
|
+
continue;
|
|
1598
|
+
}
|
|
1599
|
+
const parts = toolContentToGeminiParts(message.content);
|
|
1600
|
+
if (parts.length > 0) {
|
|
1601
|
+
contents.push({ role: "user", parts });
|
|
1602
|
+
}
|
|
1603
|
+
}
|
|
1604
|
+
return systemChunks.length > 0
|
|
1605
|
+
? { contents, systemText: systemChunks.join("\n\n") }
|
|
1606
|
+
: { contents };
|
|
1607
|
+
}
|
|
1309
1608
|
/**
|
|
1310
1609
|
* Build the `parts` array for the current user turn of a Gemini native
|
|
1311
1610
|
* `generateContent` request, including inline image + PDF blobs.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type CatalogProviderName = "api-route" | "baseten" | "cerebras" | "cloudflare" | "deepseek" | "fireworks" | "friendli" | "gmicloud" | "groq" | "huggingface" | "inception-labs" | "io-intelligence" | "mancer" | "mistral" | "morph" | "novita" | "perplexity" | "sambanova" | "together-ai" | "upstage" | "xai";
|
|
2
|
-
export type CatalogCredentialKey = "apiRoute" | "baseten" | "cerebras" | "cloudflare" | "deepseek" | "fireworks" | "friendli" | "gmicloud" | "groq" | "huggingFace" | "inceptionLabs" | "ioIntelligence" | "mancer" | "mistral" | "morph" | "novita" | "perplexity" | "sambanova" | "together" | "upstage" | "xai";
|
|
1
|
+
export type CatalogProviderName = "above-dev" | "aiand" | "ambient" | "api-route" | "baseten" | "bee-heossi" | "cerebras" | "charm-hyper" | "chutes" | "cloudflare" | "deepinfra" | "deepseek" | "empiriolabs" | "featherless-ai" | "fireworks" | "friendli" | "gmicloud" | "groq" | "huggingface" | "inception-labs" | "inco" | "inference-net" | "io-intelligence" | "koscompute" | "lilac" | "llmtech" | "mancer" | "mistral" | "moark" | "morph" | "neuralwatt" | "novita" | "ovhcloud" | "pareto-inference" | "perplexity" | "sambanova" | "sarvam" | "synthetic" | "together-ai" | "upstage" | "xai";
|
|
2
|
+
export type CatalogCredentialKey = "aboveDev" | "aiand" | "ambient" | "apiRoute" | "baseten" | "beeHeossi" | "cerebras" | "charmHyper" | "chutes" | "cloudflare" | "deepinfra" | "deepseek" | "empiriolabs" | "featherlessAi" | "fireworks" | "friendli" | "gmicloud" | "groq" | "huggingFace" | "inceptionLabs" | "inco" | "inferenceNet" | "ioIntelligence" | "koscompute" | "lilac" | "llmtech" | "mancer" | "mistral" | "moark" | "morph" | "neuralwatt" | "novita" | "ovhcloud" | "paretoInference" | "perplexity" | "sambanova" | "sarvam" | "synthetic" | "together" | "upstage" | "xai";
|
|
@@ -172,6 +172,18 @@ export type NeurolinkCredentials = {
|
|
|
172
172
|
apiKey?: string;
|
|
173
173
|
baseURL?: string;
|
|
174
174
|
};
|
|
175
|
+
aboveDev?: {
|
|
176
|
+
apiKey?: string;
|
|
177
|
+
baseURL?: string;
|
|
178
|
+
};
|
|
179
|
+
aiand?: {
|
|
180
|
+
apiKey?: string;
|
|
181
|
+
baseURL?: string;
|
|
182
|
+
};
|
|
183
|
+
ambient?: {
|
|
184
|
+
apiKey?: string;
|
|
185
|
+
baseURL?: string;
|
|
186
|
+
};
|
|
175
187
|
apiRoute?: {
|
|
176
188
|
apiKey?: string;
|
|
177
189
|
baseURL?: string;
|
|
@@ -180,19 +192,43 @@ export type NeurolinkCredentials = {
|
|
|
180
192
|
apiKey?: string;
|
|
181
193
|
baseURL?: string;
|
|
182
194
|
};
|
|
195
|
+
beeHeossi?: {
|
|
196
|
+
apiKey?: string;
|
|
197
|
+
baseURL?: string;
|
|
198
|
+
};
|
|
183
199
|
cerebras?: {
|
|
184
200
|
apiKey?: string;
|
|
185
201
|
baseURL?: string;
|
|
186
202
|
};
|
|
203
|
+
charmHyper?: {
|
|
204
|
+
apiKey?: string;
|
|
205
|
+
baseURL?: string;
|
|
206
|
+
};
|
|
207
|
+
chutes?: {
|
|
208
|
+
apiKey?: string;
|
|
209
|
+
baseURL?: string;
|
|
210
|
+
};
|
|
187
211
|
cloudflare?: {
|
|
188
212
|
apiKey?: string;
|
|
189
213
|
baseURL?: string;
|
|
190
214
|
accountId?: string;
|
|
191
215
|
};
|
|
216
|
+
deepinfra?: {
|
|
217
|
+
apiKey?: string;
|
|
218
|
+
baseURL?: string;
|
|
219
|
+
};
|
|
192
220
|
deepseek?: {
|
|
193
221
|
apiKey?: string;
|
|
194
222
|
baseURL?: string;
|
|
195
223
|
};
|
|
224
|
+
empiriolabs?: {
|
|
225
|
+
apiKey?: string;
|
|
226
|
+
baseURL?: string;
|
|
227
|
+
};
|
|
228
|
+
featherlessAi?: {
|
|
229
|
+
apiKey?: string;
|
|
230
|
+
baseURL?: string;
|
|
231
|
+
};
|
|
196
232
|
fireworks?: {
|
|
197
233
|
apiKey?: string;
|
|
198
234
|
baseURL?: string;
|
|
@@ -217,10 +253,30 @@ export type NeurolinkCredentials = {
|
|
|
217
253
|
apiKey?: string;
|
|
218
254
|
baseURL?: string;
|
|
219
255
|
};
|
|
256
|
+
inco?: {
|
|
257
|
+
apiKey?: string;
|
|
258
|
+
baseURL?: string;
|
|
259
|
+
};
|
|
260
|
+
inferenceNet?: {
|
|
261
|
+
apiKey?: string;
|
|
262
|
+
baseURL?: string;
|
|
263
|
+
};
|
|
220
264
|
ioIntelligence?: {
|
|
221
265
|
apiKey?: string;
|
|
222
266
|
baseURL?: string;
|
|
223
267
|
};
|
|
268
|
+
koscompute?: {
|
|
269
|
+
apiKey?: string;
|
|
270
|
+
baseURL?: string;
|
|
271
|
+
};
|
|
272
|
+
lilac?: {
|
|
273
|
+
apiKey?: string;
|
|
274
|
+
baseURL?: string;
|
|
275
|
+
};
|
|
276
|
+
llmtech?: {
|
|
277
|
+
apiKey?: string;
|
|
278
|
+
baseURL?: string;
|
|
279
|
+
};
|
|
224
280
|
mancer?: {
|
|
225
281
|
apiKey?: string;
|
|
226
282
|
baseURL?: string;
|
|
@@ -229,14 +285,30 @@ export type NeurolinkCredentials = {
|
|
|
229
285
|
apiKey?: string;
|
|
230
286
|
baseURL?: string;
|
|
231
287
|
};
|
|
288
|
+
moark?: {
|
|
289
|
+
apiKey?: string;
|
|
290
|
+
baseURL?: string;
|
|
291
|
+
};
|
|
232
292
|
morph?: {
|
|
233
293
|
apiKey?: string;
|
|
234
294
|
baseURL?: string;
|
|
235
295
|
};
|
|
296
|
+
neuralwatt?: {
|
|
297
|
+
apiKey?: string;
|
|
298
|
+
baseURL?: string;
|
|
299
|
+
};
|
|
236
300
|
novita?: {
|
|
237
301
|
apiKey?: string;
|
|
238
302
|
baseURL?: string;
|
|
239
303
|
};
|
|
304
|
+
ovhcloud?: {
|
|
305
|
+
apiKey?: string;
|
|
306
|
+
baseURL?: string;
|
|
307
|
+
};
|
|
308
|
+
paretoInference?: {
|
|
309
|
+
apiKey?: string;
|
|
310
|
+
baseURL?: string;
|
|
311
|
+
};
|
|
240
312
|
perplexity?: {
|
|
241
313
|
apiKey?: string;
|
|
242
314
|
baseURL?: string;
|
|
@@ -245,6 +317,14 @@ export type NeurolinkCredentials = {
|
|
|
245
317
|
apiKey?: string;
|
|
246
318
|
baseURL?: string;
|
|
247
319
|
};
|
|
320
|
+
sarvam?: {
|
|
321
|
+
apiKey?: string;
|
|
322
|
+
baseURL?: string;
|
|
323
|
+
};
|
|
324
|
+
synthetic?: {
|
|
325
|
+
apiKey?: string;
|
|
326
|
+
baseURL?: string;
|
|
327
|
+
};
|
|
248
328
|
together?: {
|
|
249
329
|
apiKey?: string;
|
|
250
330
|
baseURL?: string;
|