@odla-ai/ai 0.3.1 → 0.3.3

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.d.cts CHANGED
@@ -179,10 +179,14 @@ declare class OdlaAIError extends Error {
179
179
  readonly code: OracleErrorType;
180
180
  readonly providerStatus?: number;
181
181
  readonly retryAfter?: number;
182
+ /** Sanitized provider usage when a response was received before a later
183
+ * validation/tool-shape failure. Omitted when usage is genuinely unknown. */
184
+ readonly usage?: OracleUsage;
182
185
  constructor(code: OracleErrorType, message: string, opts?: {
183
186
  providerStatus?: number;
184
187
  retryAfter?: number;
185
188
  cause?: unknown;
189
+ usage?: OracleUsage;
186
190
  });
187
191
  toShape(): OracleErrorShape;
188
192
  }
@@ -233,6 +237,7 @@ declare class ToolInputError extends OdlaAIError {
233
237
  constructor(message: string, opts?: {
234
238
  tool?: string;
235
239
  cause?: unknown;
240
+ usage?: OracleUsage;
236
241
  });
237
242
  }
238
243
  /** The caller cancelled a request. This is not an upstream failure and should
@@ -254,6 +259,7 @@ declare class ProviderError extends OdlaAIError {
254
259
  constructor(message: string, opts?: {
255
260
  providerStatus?: number;
256
261
  cause?: unknown;
262
+ usage?: OracleUsage;
257
263
  });
258
264
  }
259
265
 
package/dist/index.d.ts CHANGED
@@ -179,10 +179,14 @@ declare class OdlaAIError extends Error {
179
179
  readonly code: OracleErrorType;
180
180
  readonly providerStatus?: number;
181
181
  readonly retryAfter?: number;
182
+ /** Sanitized provider usage when a response was received before a later
183
+ * validation/tool-shape failure. Omitted when usage is genuinely unknown. */
184
+ readonly usage?: OracleUsage;
182
185
  constructor(code: OracleErrorType, message: string, opts?: {
183
186
  providerStatus?: number;
184
187
  retryAfter?: number;
185
188
  cause?: unknown;
189
+ usage?: OracleUsage;
186
190
  });
187
191
  toShape(): OracleErrorShape;
188
192
  }
@@ -233,6 +237,7 @@ declare class ToolInputError extends OdlaAIError {
233
237
  constructor(message: string, opts?: {
234
238
  tool?: string;
235
239
  cause?: unknown;
240
+ usage?: OracleUsage;
236
241
  });
237
242
  }
238
243
  /** The caller cancelled a request. This is not an upstream failure and should
@@ -254,6 +259,7 @@ declare class ProviderError extends OdlaAIError {
254
259
  constructor(message: string, opts?: {
255
260
  providerStatus?: number;
256
261
  cause?: unknown;
262
+ usage?: OracleUsage;
257
263
  });
258
264
  }
259
265
 
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  normalizeError,
16
16
  signalWithDeadline,
17
17
  throwIfAborted
18
- } from "./chunk-PXXCN2EU.js";
18
+ } from "./chunk-ZTY6FLZ5.js";
19
19
 
20
20
  // src/shape/helpers.ts
21
21
  function isTextBlock(b) {
@@ -658,17 +658,17 @@ async function createProvider(id, apiKey) {
658
658
  let provider;
659
659
  switch (id) {
660
660
  case "anthropic": {
661
- const { AnthropicProvider } = await import("./anthropic-2NPMHJZT.js");
661
+ const { AnthropicProvider } = await import("./anthropic-AGA2NYWP.js");
662
662
  provider = new AnthropicProvider(apiKey);
663
663
  break;
664
664
  }
665
665
  case "openai": {
666
- const { OpenAIProvider } = await import("./openai-NTQCF577.js");
666
+ const { OpenAIProvider } = await import("./openai-ACSSZ3VC.js");
667
667
  provider = new OpenAIProvider(apiKey);
668
668
  break;
669
669
  }
670
670
  case "google": {
671
- const { GoogleProvider } = await import("./google-3XV2VWVB.js");
671
+ const { GoogleProvider } = await import("./google-H5CCSLJ2.js");
672
672
  provider = new GoogleProvider(apiKey);
673
673
  break;
674
674
  }
@@ -764,12 +764,12 @@ function init(opts = {}) {
764
764
  const res = await provider.create(spec, req);
765
765
  const block = res.content.find((b) => b.type === "tool_use" && b.name === c.tool.name);
766
766
  if (!block || block.type !== "tool_use") {
767
- throw new ProviderError(`Model "${model}" did not return the forced tool call "${c.tool.name}".`);
767
+ throw new ProviderError(`Model "${model}" did not return the forced tool call "${c.tool.name}".`, { usage: res.usage });
768
768
  }
769
769
  const validation = validateJsonSchema(c.tool.parameters, block.input);
770
770
  if (!validation.valid) {
771
771
  const detail = validation.issues.slice(0, 5).map((i) => `${i.path} ${i.message}`).join("; ");
772
- throw new ToolInputError(`Tool "${c.tool.name}" returned invalid input: ${detail}`, { tool: c.tool.name });
772
+ throw new ToolInputError(`Tool "${c.tool.name}" returned invalid input: ${detail}`, { tool: c.tool.name, usage: res.usage });
773
773
  }
774
774
  return { value: block.input, usage: res.usage };
775
775
  };
@@ -943,6 +943,11 @@ Every error is an OdlaAIError subclass with a stable \`code\` \u2014 branch on e
943
943
  config, auth, rate_limit, capability_unsupported, context_window, invalid_request,
944
944
  tool_input_invalid, cancelled, deadline_exceeded, provider_error.
945
945
 
946
+ OdlaAIError.usage is an optional frozen token-usage record. It exists only when
947
+ the provider returned a response before a later forced-tool/schema validation
948
+ failure, and may be absent for every earlier failure. It is intentionally not
949
+ included in toShape() or streaming OracleErrorShape.
950
+
946
951
  ## Models
947
952
 
948
953
  ${models}