@adonis-agora/agent 0.67.0 → 0.68.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.
@@ -24,9 +24,7 @@ function parseRef(ref) {
24
24
  * FALHA ALTO. Um modelo pedido que não existe no catálogo, ou existe sem preço, vira erro — e não
25
25
  * uma linha faltando em silêncio, que reapareceria depois como `$0.00` num painel.
26
26
  */
27
- export async function fetchModelsDevPrices(models, options = {}) {
28
- if (models.length === 0)
29
- return [];
27
+ async function loadCatalog(options) {
30
28
  const doFetch = options.fetch ?? globalThis.fetch;
31
29
  if (typeof doFetch !== 'function') {
32
30
  throw new Error('models.dev: nenhum `fetch` disponível — passe `options.fetch`.');
@@ -36,25 +34,76 @@ export async function fetchModelsDevPrices(models, options = {}) {
36
34
  if (!response.ok) {
37
35
  throw new Error(`models.dev: ${url} respondeu ${response.status}`);
38
36
  }
39
- const catalog = (await response.json());
37
+ return (await response.json());
38
+ }
39
+ /** The price row a catalog entry yields, keyed by the model name — or `undefined` when it has none. */
40
+ function priceOf(catalog, ref) {
41
+ const { provider, model } = parseRef(ref);
42
+ const cost = catalog[provider]?.models?.[model]?.cost;
43
+ if (cost === undefined || typeof cost.input !== 'number' || typeof cost.output !== 'number') {
44
+ return undefined;
45
+ }
46
+ return {
47
+ modelId: model,
48
+ inputPricePer1m: cost.input,
49
+ outputPricePer1m: cost.output,
50
+ ...(typeof cost.cache_write === 'number' ? { cacheWritePricePer1m: cost.cache_write } : {}),
51
+ ...(typeof cost.cache_read === 'number' ? { cacheReadPricePer1m: cost.cache_read } : {}),
52
+ };
53
+ }
54
+ /**
55
+ * The lenient twin of {@link fetchModelsDevPrices}, for boot-time seeding: a model the catalog does
56
+ * not price is reported in `missing` instead of failing the whole batch, so one unknown model does
57
+ * not leave every other one unpriced. Throws only when the catalog itself cannot be read.
58
+ *
59
+ * Each ref is a LIST of candidates, tried in order — the first one the catalog prices wins.
60
+ */
61
+ export async function lookupModelsDevPrices(refs, options = {}) {
62
+ if (refs.length === 0)
63
+ return { prices: [], missing: [] };
64
+ const catalog = await loadCatalog(options);
65
+ const prices = [];
66
+ const missing = [];
67
+ for (const candidates of refs) {
68
+ const price = candidates.map((ref) => priceOf(catalog, ref)).find((p) => p !== undefined);
69
+ if (price !== undefined)
70
+ prices.push(price);
71
+ else if (candidates[0] !== undefined)
72
+ missing.push(candidates[0]);
73
+ }
74
+ return { prices, missing };
75
+ }
76
+ /**
77
+ * The models.dev refs to try for a model, most specific first: `<provider>/<modelId>`, then — for an
78
+ * OpenRouter-style id (`deepseek/deepseek-v4.1-flash`) reached through another SDK — the OpenRouter
79
+ * list price. `provider` is the AI SDK provider family (`openrouter`, `openai`, `vercel`, …).
80
+ */
81
+ export function modelsDevRefsFor(modelId, provider) {
82
+ const refs = [];
83
+ if (provider !== undefined && provider.length > 0)
84
+ refs.push(`${provider}/${modelId}`);
85
+ // A gateway id names its own provider (`openai/gpt-4o-mini` through the Vercel AI Gateway).
86
+ if (provider === 'vercel' && modelId.includes('/'))
87
+ refs.push(modelId);
88
+ if (modelId.includes('/') && provider !== 'openrouter')
89
+ refs.push(`openrouter/${modelId}`);
90
+ return refs;
91
+ }
92
+ export async function fetchModelsDevPrices(models, options = {}) {
93
+ if (models.length === 0)
94
+ return [];
95
+ const catalog = await loadCatalog(options);
40
96
  const prices = [];
41
97
  for (const ref of models) {
42
98
  const { provider, model } = parseRef(ref);
43
- const entry = catalog[provider]?.models?.[model];
44
- if (entry === undefined) {
99
+ if (catalog[provider]?.models?.[model] === undefined) {
45
100
  throw new Error(`models.dev: não achei "${model}" em "${provider}".`);
46
101
  }
47
- const cost = entry.cost;
48
- if (cost === undefined || typeof cost.input !== 'number' || typeof cost.output !== 'number') {
102
+ const price = priceOf(catalog, ref);
103
+ if (price === undefined) {
49
104
  throw new Error(`models.dev: "${ref}" existe no catálogo mas não publica preço de input/output.`);
50
105
  }
51
- prices.push({
52
- modelId: model,
53
- inputPricePer1m: cost.input,
54
- outputPricePer1m: cost.output,
55
- ...(typeof cost.cache_write === 'number' ? { cacheWritePricePer1m: cost.cache_write } : {}),
56
- ...(typeof cost.cache_read === 'number' ? { cacheReadPricePer1m: cost.cache_read } : {}),
57
- });
106
+ prices.push(price);
58
107
  }
59
108
  return prices;
60
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"models-dev.js","sourceRoot":"","sources":["../../../src/pricing/models-dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models-dev.js","sourceRoot":"","sources":["../../../src/pricing/models-dev.ts"],"names":[],"mappings":"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"}
@@ -39,7 +39,7 @@ export interface ModelTurnResult {
39
39
  modelId?: string;
40
40
  /**
41
41
  * The ACTUAL USD cost of this turn, when the provider knows it — a gateway (Vercel AI Gateway
42
- * `providerMetadata.gateway.cost`, OpenRouter `total_cost`) reports real spend; a direct provider
42
+ * `providerMetadata.gateway.cost`, OpenRouter `providerMetadata.openrouter.usage.cost`) reports real spend; a direct provider
43
43
  * (Anthropic/OpenAI/Bedrock) reports only tokens and leaves this undefined. When set, the
44
44
  * governance read-model uses it verbatim; otherwise it estimates from tokens × the pricing table.
45
45
  */
@@ -72,5 +72,20 @@ export interface ModelTurnResult {
72
72
  */
73
73
  export interface ModelProvider {
74
74
  runTurn(args: ModelTurnArgs): Promise<ModelTurnResult>;
75
+ /**
76
+ * The models this provider can run, for boot-time pricing: the provider seeds a missing price row
77
+ * from models.dev and warns about a model that would record no cost at all. Optional — a provider
78
+ * without it is simply not checked. `aiSdkModel` / `aiSdkModels` implement it.
79
+ */
80
+ describeModels?(): DescribedModel[];
81
+ }
82
+ /** One model a {@link ModelProvider} runs, as boot-time pricing sees it. */
83
+ export interface DescribedModel {
84
+ /** The id the model is called with (`deepseek/deepseek-v4.1-flash`, `gpt-4o-mini`). */
85
+ modelId: string;
86
+ /** Its provider family as models.dev names it (`openrouter`, `openai`, `anthropic`, `vercel`). */
87
+ provider?: string;
88
+ /** The provider reports each call's real USD cost (a gateway), so no price row is needed. */
89
+ reportsCost: boolean;
75
90
  }
76
91
  //# sourceMappingURL=model-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-provider.d.ts","sourceRoot":"","sources":["../../../src/spi/model-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,uEAAuE;IACvE,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACxD"}
1
+ {"version":3,"file":"model-provider.d.ts","sourceRoot":"","sources":["../../../src/spi/model-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,uEAAuE;IACvE,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2FAA2F;AAC3F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qGAAqG;IACrG,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACvD;;;;OAIG;IACH,cAAc,CAAC,IAAI,cAAc,EAAE,CAAC;CACrC;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,WAAW,EAAE,OAAO,CAAC;CACtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/agent",
3
- "version": "0.67.0",
3
+ "version": "0.68.0",
4
4
  "description": "Governed, durable-backed AI agent (chat + tool-calling + governance) for AdonisJS — part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -124,7 +124,17 @@ Source: `packages/adonis/docs/governance/quota-and-cost.mdx`.
124
124
  With a Lucid main store, pricing mirrors the same connection automatically (table
125
125
  auto-created) — no extra config. Cost per turn resolves in order: provider-reported
126
126
  (a gateway) wins, else an estimate from the current price rows fetched once per run,
127
- else `null` — never a fabricated `0`. Seed prices once (e.g. from an Ace command):
127
+ else `null` — never a fabricated `0`.
128
+
129
+ Gateways report the real cost: OpenRouter via the official `@openrouter/ai-sdk-provider`
130
+ (`providerMetadata.openrouter.usage.cost` — `aiSdkModel` / `aiSdkModels` request usage accounting on every
131
+ OpenRouter call themselves unless you set your own `openrouter.usage`) and the Vercel AI Gateway (`providerMetadata.gateway.cost`). OpenRouter
132
+ reached through `@ai-sdk/openai` with a custom `baseURL` reports no cost — use the official provider.
133
+
134
+ At boot, any configured model with no price row gets the models.dev list price written as
135
+ its row (never overwriting one; `priceCatalog: false` turns the fetch off, skipped under
136
+ `NODE_ENV=test` unless `priceCatalog` is set explicitly), and a model that still has no price and no gateway cost is named in one
137
+ boot warning. To set your own prices (e.g. from an Ace command):
128
138
 
129
139
  ```ts
130
140
  import db from '@adonisjs/lucid/services/db'