@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.
- package/CHANGELOG.md +11 -0
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +46 -0
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/src/ai-sdk/ai-sdk-model.d.ts +12 -1
- package/dist/src/ai-sdk/ai-sdk-model.d.ts.map +1 -1
- package/dist/src/ai-sdk/ai-sdk-model.js +87 -5
- package/dist/src/ai-sdk/ai-sdk-model.js.map +1 -1
- package/dist/src/define_config.d.ts +13 -0
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/pricing/boot-pricing.d.ts +41 -0
- package/dist/src/pricing/boot-pricing.d.ts.map +1 -0
- package/dist/src/pricing/boot-pricing.js +87 -0
- package/dist/src/pricing/boot-pricing.js.map +1 -0
- package/dist/src/pricing/models-dev.d.ts +17 -12
- package/dist/src/pricing/models-dev.d.ts.map +1 -1
- package/dist/src/pricing/models-dev.js +64 -15
- package/dist/src/pricing/models-dev.js.map +1 -1
- package/dist/src/spi/model-provider.d.ts +16 -1
- package/dist/src/spi/model-provider.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/agent-setup/SKILL.md +11 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
48
|
-
if (
|
|
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":"AAEA,6DAA6D;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAC;AA6B5D,SAAS,QAAQ,CAAC,GAAiB;IACjC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,gBAAgB,GAAG,sEAAsE;YACvF,0FAA0F;YAC1F,mEAAmE,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,
|
|
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 `
|
|
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;
|
|
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
|
@@ -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`.
|
|
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'
|