@llumiverse/drivers 1.1.1-dev.20260505.151157Z → 1.3.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/lib/cjs/anthropic/index.js +64 -0
- package/lib/cjs/anthropic/index.js.map +1 -0
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/openai/index.js +12 -6
- package/lib/cjs/openai/index.js.map +1 -1
- package/lib/cjs/shared/claude-messages.js +737 -0
- package/lib/cjs/shared/claude-messages.js.map +1 -0
- package/lib/cjs/vertexai/index.js.map +1 -1
- package/lib/cjs/vertexai/models/claude.js +27 -872
- package/lib/cjs/vertexai/models/claude.js.map +1 -1
- package/lib/cjs/vertexai/models/gemini.js +18 -12
- package/lib/cjs/vertexai/models/gemini.js.map +1 -1
- package/lib/esm/anthropic/index.js +57 -0
- package/lib/esm/anthropic/index.js.map +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/openai/index.js +12 -7
- package/lib/esm/openai/index.js.map +1 -1
- package/lib/esm/shared/claude-messages.js +716 -0
- package/lib/esm/shared/claude-messages.js.map +1 -0
- package/lib/esm/vertexai/index.js.map +1 -1
- package/lib/esm/vertexai/models/claude.js +27 -865
- package/lib/esm/vertexai/models/claude.js.map +1 -1
- package/lib/esm/vertexai/models/gemini.js +18 -12
- package/lib/esm/vertexai/models/gemini.js.map +1 -1
- package/lib/types/anthropic/index.d.ts +21 -0
- package/lib/types/anthropic/index.d.ts.map +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/openai/index.d.ts +1 -0
- package/lib/types/openai/index.d.ts.map +1 -1
- package/lib/types/shared/claude-messages.d.ts +75 -0
- package/lib/types/shared/claude-messages.d.ts.map +1 -0
- package/lib/types/vertexai/index.d.ts +4 -4
- package/lib/types/vertexai/index.d.ts.map +1 -1
- package/lib/types/vertexai/models/claude.d.ts +3 -106
- package/lib/types/vertexai/models/claude.d.ts.map +1 -1
- package/lib/types/vertexai/models/gemini.d.ts +1 -1
- package/lib/types/vertexai/models/gemini.d.ts.map +1 -1
- package/package.json +7 -6
- package/src/anthropic/index.ts +104 -0
- package/src/index.ts +1 -0
- package/src/openai/index.ts +13 -8
- package/src/shared/claude-messages.ts +879 -0
- package/src/vertexai/index.ts +18 -19
- package/src/vertexai/models/claude-error-handling.test.ts +3 -3
- package/src/vertexai/models/claude.ts +44 -1016
- package/src/vertexai/models/gemini.ts +27 -14
|
@@ -482,7 +482,7 @@ export class GeminiModelDefinition implements ModelDefinition<GenerateContentPro
|
|
|
482
482
|
return { contents, system };
|
|
483
483
|
}
|
|
484
484
|
|
|
485
|
-
usageMetadataToTokenUsage(usageMetadata: GenerateContentResponseUsageMetadata | undefined): ExecutionTokenUsage {
|
|
485
|
+
usageMetadataToTokenUsage(driver: VertexAIDriver, usageMetadata: GenerateContentResponseUsageMetadata | undefined): ExecutionTokenUsage {
|
|
486
486
|
if (!usageMetadata || !usageMetadata.totalTokenCount) {
|
|
487
487
|
return {};
|
|
488
488
|
}
|
|
@@ -499,11 +499,14 @@ export class GeminiModelDefinition implements ModelDefinition<GenerateContentPro
|
|
|
499
499
|
+ (usageMetadata.toolUsePromptTokenCount ?? 0);
|
|
500
500
|
|
|
501
501
|
if ((tokenUsage.total ?? 0) !== (tokenUsage.prompt ?? 0) + tokenUsage.result) {
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
502
|
+
// Token-accounting mismatch: warn-level diagnostic (the call still
|
|
503
|
+
// returns the best-effort tokenUsage). Use the driver's structured
|
|
504
|
+
// logger so we don't promote stderr writes to ERROR in serverless
|
|
505
|
+
// log aggregators — see the recoverable-tool-call sites below.
|
|
506
|
+
driver.logger.warn(
|
|
507
|
+
{ total: tokenUsage.total, prompt: tokenUsage.prompt, result: tokenUsage.result },
|
|
508
|
+
"[VertexAI] Gemini token usage mismatch: total does not equal prompt + result",
|
|
509
|
+
);
|
|
507
510
|
}
|
|
508
511
|
|
|
509
512
|
if (!tokenUsage.result) {
|
|
@@ -545,7 +548,7 @@ export class GeminiModelDefinition implements ModelDefinition<GenerateContentPro
|
|
|
545
548
|
const payload = getGeminiPayload(options, prompt);
|
|
546
549
|
const response = await client.models.generateContent(payload);
|
|
547
550
|
|
|
548
|
-
const token_usage: ExecutionTokenUsage = this.usageMetadataToTokenUsage(response.usageMetadata);
|
|
551
|
+
const token_usage: ExecutionTokenUsage = this.usageMetadataToTokenUsage(driver, response.usageMetadata);
|
|
549
552
|
|
|
550
553
|
let tool_use: ToolUse[] | undefined;
|
|
551
554
|
let finish_reason: string | undefined, result: any;
|
|
@@ -570,10 +573,15 @@ export class GeminiModelDefinition implements ModelDefinition<GenerateContentPro
|
|
|
570
573
|
tool_use = collectToolUseParts(content);
|
|
571
574
|
|
|
572
575
|
// For recoverable tool call issues, log warning but continue processing
|
|
573
|
-
// The workflow will handle the invalid tool call gracefully
|
|
576
|
+
// The workflow will handle the invalid tool call gracefully.
|
|
577
|
+
// Route through the driver's structured logger instead of `console.warn`
|
|
578
|
+
// so downstream runtimes (e.g. Cloud Run) don't promote stderr writes
|
|
579
|
+
// to ERROR severity for what is, by definition, a recoverable event.
|
|
574
580
|
if (isRecoverableToolCall && tool_use && tool_use.length > 0) {
|
|
575
|
-
|
|
576
|
-
`
|
|
581
|
+
driver.logger.warn(
|
|
582
|
+
`[Gemini] Recoverable tool call issue (${candidate.finishReason}): ` +
|
|
583
|
+
`Model tried to call undeclared tool(s): ${tool_use.map(t => t.tool_name).join(', ')}`,
|
|
584
|
+
);
|
|
577
585
|
}
|
|
578
586
|
|
|
579
587
|
result = extractCompletionResults(content);
|
|
@@ -654,7 +662,7 @@ export class GeminiModelDefinition implements ModelDefinition<GenerateContentPro
|
|
|
654
662
|
const response = await client.models.generateContentStream(payload);
|
|
655
663
|
|
|
656
664
|
const stream = asyncMap(response, async (item) => {
|
|
657
|
-
const token_usage: ExecutionTokenUsage = this.usageMetadataToTokenUsage(item.usageMetadata);
|
|
665
|
+
const token_usage: ExecutionTokenUsage = this.usageMetadataToTokenUsage(driver, item.usageMetadata);
|
|
658
666
|
if (item.candidates && item.candidates.length > 0) {
|
|
659
667
|
for (const candidate of item.candidates) {
|
|
660
668
|
let tool_use: ToolUse[] | undefined;
|
|
@@ -677,10 +685,15 @@ export class GeminiModelDefinition implements ModelDefinition<GenerateContentPro
|
|
|
677
685
|
tool_use = collectToolUseParts(candidate.content);
|
|
678
686
|
if (tool_use) {
|
|
679
687
|
finish_reason = "tool_use";
|
|
680
|
-
// Log warning for recoverable tool call issues
|
|
688
|
+
// Log warning for recoverable tool call issues — see the
|
|
689
|
+
// matching site in `requestTextCompletion` above for why
|
|
690
|
+
// we route through the driver's logger instead of
|
|
691
|
+
// `console.warn`.
|
|
681
692
|
if (isRecoverableToolCall) {
|
|
682
|
-
|
|
683
|
-
`
|
|
693
|
+
driver.logger.warn(
|
|
694
|
+
`[Gemini] Recoverable tool call issue (${candidate.finishReason}): ` +
|
|
695
|
+
`Model tried to call undeclared tool(s): ${tool_use.map(t => t.tool_name).join(', ')}`,
|
|
696
|
+
);
|
|
684
697
|
}
|
|
685
698
|
}
|
|
686
699
|
return {
|