@agenticprimitives/model-gateway 0.0.0-alpha.0 → 0.0.0-stage
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/README.md +2 -28
- package/package.json +4 -30
- package/LICENSE +0 -21
- package/dist/adapters/anthropic.d.ts +0 -13
- package/dist/adapters/anthropic.d.ts.map +0 -1
- package/dist/adapters/anthropic.js +0 -59
- package/dist/adapters/anthropic.js.map +0 -1
- package/dist/adapters/openai-compat.d.ts +0 -17
- package/dist/adapters/openai-compat.d.ts.map +0 -1
- package/dist/adapters/openai-compat.js +0 -66
- package/dist/adapters/openai-compat.js.map +0 -1
- package/dist/budget.d.ts +0 -86
- package/dist/budget.d.ts.map +0 -1
- package/dist/budget.js +0 -98
- package/dist/budget.js.map +0 -1
- package/dist/contract.d.ts +0 -268
- package/dist/contract.d.ts.map +0 -1
- package/dist/contract.js +0 -128
- package/dist/contract.js.map +0 -1
- package/dist/handler.d.ts +0 -24
- package/dist/handler.d.ts.map +0 -1
- package/dist/handler.js +0 -124
- package/dist/handler.js.map +0 -1
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -13
- package/dist/index.js.map +0 -1
- package/dist/openai-compat/translate.d.ts +0 -122
- package/dist/openai-compat/translate.d.ts.map +0 -1
- package/dist/openai-compat/translate.js +0 -72
- package/dist/openai-compat/translate.js.map +0 -1
- package/dist/ops.d.ts +0 -6
- package/dist/ops.d.ts.map +0 -1
- package/dist/ops.js +0 -38
- package/dist/ops.js.map +0 -1
- package/dist/policy.d.ts +0 -26
- package/dist/policy.d.ts.map +0 -1
- package/dist/policy.js +0 -83
- package/dist/policy.js.map +0 -1
- package/dist/ports.d.ts +0 -95
- package/dist/ports.d.ts.map +0 -1
- package/dist/ports.js +0 -43
- package/dist/ports.js.map +0 -1
- package/dist/usage.d.ts +0 -23
- package/dist/usage.d.ts.map +0 -1
- package/dist/usage.js +0 -16
- package/dist/usage.js.map +0 -1
- package/spec.md +0 -7
package/dist/index.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// @agenticprimitives/model-gateway — spec 434: the contract, the policy, the budget algebra, the usage normalizer, the
|
|
2
|
-
// adapters and the handler the town's inference Worker mounts. No deployed infra, no provider SDK, no vendor named.
|
|
3
|
-
export { PACKAGE_NAME, PACKAGE_STATUS, SPEC_REF, FALLBACK_CLASSES, isRefusal, catalogKey, canonicalJson, digestOf, profileVersion, validateProfile, validateCatalogEntry, validateEntitlement, validateGenerateRequest, } from './contract.js';
|
|
4
|
-
export { decidePolicy, limitsFor, profilesEmptiedBy, DEFAULT_MAX_ATTEMPTS } from './policy.js';
|
|
5
|
-
export { reserve, settle, expire, stale, rollDay, rebuildFromReceipts, utilisation, emptyBudget, estimateTokens, estimateCostMicroUsd, costMicroUsd, dayOf, minuteOf } from './budget.js';
|
|
6
|
-
export { normalizeAnthropicUsage, normalizeOpenAiUsage, UNKNOWN_USAGE } from './usage.js';
|
|
7
|
-
export { ProviderFailure, classifyStatus, classifyError } from './ports.js';
|
|
8
|
-
export { createGatewayHandler } from './handler.js';
|
|
9
|
-
export { anthropicAdapter, foldForAnthropic } from './adapters/anthropic.js';
|
|
10
|
-
export { openAiCompatAdapter, foldForOpenAi, parseToolCalls } from './adapters/openai-compat.js';
|
|
11
|
-
export { chatRequestToGenerate, generateToChatCompletion, refusalToChatError, streamEventToChatChunks } from './openai-compat/translate.js';
|
|
12
|
-
export { summarizeReceipts } from './ops.js';
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,oHAAoH;AACpH,OAAO,EACL,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EACxH,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,uBAAuB,GACpF,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE/F,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE1L,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEjG,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5I,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import type { GenerateRequestV1, GenerateResponseV1, GatewayRefusalV1, StreamEventV1 } from '../contract.js';
|
|
2
|
-
export interface ChatCompletionRequest {
|
|
3
|
-
model: string;
|
|
4
|
-
messages: Array<{
|
|
5
|
-
role: string;
|
|
6
|
-
content: string | Array<{
|
|
7
|
-
type: string;
|
|
8
|
-
text?: string;
|
|
9
|
-
}> | null;
|
|
10
|
-
tool_call_id?: string;
|
|
11
|
-
name?: string;
|
|
12
|
-
tool_calls?: Array<{
|
|
13
|
-
id?: string;
|
|
14
|
-
type?: string;
|
|
15
|
-
function: {
|
|
16
|
-
name: string;
|
|
17
|
-
arguments: string;
|
|
18
|
-
};
|
|
19
|
-
}>;
|
|
20
|
-
}>;
|
|
21
|
-
tools?: Array<{
|
|
22
|
-
type: 'function';
|
|
23
|
-
function: {
|
|
24
|
-
name: string;
|
|
25
|
-
description?: string;
|
|
26
|
-
parameters?: Record<string, unknown>;
|
|
27
|
-
};
|
|
28
|
-
}>;
|
|
29
|
-
tool_choice?: 'none' | 'auto' | 'required' | {
|
|
30
|
-
type: 'function';
|
|
31
|
-
function: {
|
|
32
|
-
name: string;
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
max_tokens?: number;
|
|
36
|
-
max_completion_tokens?: number;
|
|
37
|
-
temperature?: number;
|
|
38
|
-
stream?: boolean;
|
|
39
|
-
stream_options?: {
|
|
40
|
-
include_usage?: boolean;
|
|
41
|
-
};
|
|
42
|
-
user?: string;
|
|
43
|
-
/** Agentic Primitives extension: run attribution. Everything here is ASSERTED. */
|
|
44
|
-
metadata?: {
|
|
45
|
-
run_ref?: string;
|
|
46
|
-
step_ref?: string;
|
|
47
|
-
agent?: string;
|
|
48
|
-
purpose?: string;
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
export type TranslateResult = {
|
|
52
|
-
ok: true;
|
|
53
|
-
request: GenerateRequestV1;
|
|
54
|
-
} | {
|
|
55
|
-
ok: false;
|
|
56
|
-
status: number;
|
|
57
|
-
error: {
|
|
58
|
-
message: string;
|
|
59
|
-
type: string;
|
|
60
|
-
code: string;
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
export declare function chatRequestToGenerate(body: unknown, opts?: {
|
|
64
|
-
purpose?: string;
|
|
65
|
-
}): TranslateResult;
|
|
66
|
-
export interface ChatCompletionResponse {
|
|
67
|
-
id: string;
|
|
68
|
-
object: 'chat.completion';
|
|
69
|
-
created: number;
|
|
70
|
-
model: string;
|
|
71
|
-
choices: Array<{
|
|
72
|
-
index: number;
|
|
73
|
-
message: {
|
|
74
|
-
role: 'assistant';
|
|
75
|
-
content: string | null;
|
|
76
|
-
tool_calls?: Array<{
|
|
77
|
-
id: string;
|
|
78
|
-
type: 'function';
|
|
79
|
-
function: {
|
|
80
|
-
name: string;
|
|
81
|
-
arguments: string;
|
|
82
|
-
};
|
|
83
|
-
}>;
|
|
84
|
-
};
|
|
85
|
-
finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter';
|
|
86
|
-
}>;
|
|
87
|
-
usage: {
|
|
88
|
-
prompt_tokens: number;
|
|
89
|
-
completion_tokens: number;
|
|
90
|
-
total_tokens: number;
|
|
91
|
-
prompt_tokens_details?: {
|
|
92
|
-
cached_tokens: number;
|
|
93
|
-
};
|
|
94
|
-
completion_tokens_details?: {
|
|
95
|
-
reasoning_tokens: number;
|
|
96
|
-
};
|
|
97
|
-
};
|
|
98
|
-
/** Agentic Primitives extension: the receipt that answers for this completion. */
|
|
99
|
-
ap_receipt: GenerateResponseV1['receipt'];
|
|
100
|
-
}
|
|
101
|
-
export declare function generateToChatCompletion(res: GenerateResponseV1, opts?: {
|
|
102
|
-
created?: number;
|
|
103
|
-
}): ChatCompletionResponse;
|
|
104
|
-
/** The OpenAI error envelope for a gateway refusal, with the status the reason implies. */
|
|
105
|
-
export declare function refusalToChatError(r: GatewayRefusalV1): {
|
|
106
|
-
status: number;
|
|
107
|
-
body: {
|
|
108
|
-
error: {
|
|
109
|
-
message: string;
|
|
110
|
-
type: string;
|
|
111
|
-
code: string;
|
|
112
|
-
ap_receipts?: string[];
|
|
113
|
-
};
|
|
114
|
-
};
|
|
115
|
-
};
|
|
116
|
-
/** One SSE chunk line per stream event; the `done` event yields the final chunk with usage, then `[DONE]`. */
|
|
117
|
-
export declare function streamEventToChatChunks(e: StreamEventV1, ctx: {
|
|
118
|
-
id: string;
|
|
119
|
-
profile: string;
|
|
120
|
-
created: number;
|
|
121
|
-
}): string[];
|
|
122
|
-
//# sourceMappingURL=translate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../src/openai-compat/translate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAa,aAAa,EAAkC,MAAM,gBAAgB,CAAC;AAExJ,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,GAAG,IAAI,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IAC5O,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5H,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC9F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtF;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAK/J,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CA2BrG;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IACtE,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,IAAI,EAAE,WAAW,CAAC;YAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,UAAU,CAAC,EAAE,KAAK,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,UAAU,CAAC;gBAAC,QAAQ,EAAE;oBAAE,IAAI,EAAE,MAAM,CAAC;oBAAC,SAAS,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;QAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,gBAAgB,CAAA;KAAE,CAAC,CAAC;IACnQ,KAAK,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,qBAAqB,CAAC,EAAE;YAAE,aAAa,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,yBAAyB,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC/L,kFAAkF;IAClF,UAAU,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;CAC3C;AAKD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,sBAAsB,CAMzH;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,KAAK,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,CAIpK;AAED,8GAA8G;AAC9G,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,EAAE,CAOzH"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
const contentText = (c) => typeof c === 'string' ? c : Array.isArray(c) ? c.map((p) => (p.type === 'text' ? p.text ?? '' : '')).join('') : '';
|
|
2
|
-
export function chatRequestToGenerate(body, opts = {}) {
|
|
3
|
-
const b = (body ?? {});
|
|
4
|
-
const bad = (message, code = 'invalid_request_error') => ({ ok: false, status: 400, error: { message, type: 'invalid_request_error', code } });
|
|
5
|
-
if (typeof b.model !== 'string' || !b.model)
|
|
6
|
-
return bad('`model` is required and names a PROFILE (planner-fast, composer-default, …), never a provider model');
|
|
7
|
-
if (/[\/:]/.test(b.model) || /^(gpt|claude|gemini|llama|grok|mistral|deepseek|qwen|o[0-9])[-_.0-9]/i.test(b.model))
|
|
8
|
-
return bad(`\`model\` names a profile here; "${b.model}" looks like a provider model. GET /v1/models lists the profiles this credential may use.`, 'model_not_found');
|
|
9
|
-
if (!Array.isArray(b.messages) || b.messages.length === 0)
|
|
10
|
-
return bad('`messages` must be a non-empty array');
|
|
11
|
-
const messages = [];
|
|
12
|
-
for (const m of b.messages) {
|
|
13
|
-
const role = m.role;
|
|
14
|
-
if (role === 'system' || role === 'developer')
|
|
15
|
-
messages.push({ role: 'system', content: contentText(m.content) });
|
|
16
|
-
else if (role === 'user')
|
|
17
|
-
messages.push({ role: 'user', content: contentText(m.content) });
|
|
18
|
-
else if (role === 'assistant')
|
|
19
|
-
messages.push({ role: 'assistant', content: contentText(m.content), ...(m.tool_calls?.length ? { toolCalls: m.tool_calls.map((c) => { let args = {}; try {
|
|
20
|
-
args = JSON.parse(c.function.arguments || '{}');
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
args = { _raw: c.function.arguments };
|
|
24
|
-
} return { ...(c.id ? { id: c.id } : {}), name: c.function.name, args }; }) } : {}) });
|
|
25
|
-
else if (role === 'tool') {
|
|
26
|
-
if (!m.tool_call_id)
|
|
27
|
-
return bad('a `tool` message needs `tool_call_id`');
|
|
28
|
-
messages.push({ role: 'tool', content: contentText(m.content), toolCallId: m.tool_call_id });
|
|
29
|
-
}
|
|
30
|
-
else
|
|
31
|
-
return bad(`unknown message role "${String(role)}"`);
|
|
32
|
-
}
|
|
33
|
-
const tools = b.tools?.map((t) => ({ name: t.function.name, ...(t.function.description ? { description: t.function.description } : {}), inputSchema: t.function.parameters ?? { type: 'object', properties: {} } }));
|
|
34
|
-
const toolChoice = b.tool_choice === undefined ? undefined : typeof b.tool_choice === 'string' ? b.tool_choice : { name: b.tool_choice.function.name };
|
|
35
|
-
const max = b.max_completion_tokens ?? b.max_tokens;
|
|
36
|
-
const md = b.metadata ?? {};
|
|
37
|
-
return {
|
|
38
|
-
ok: true,
|
|
39
|
-
request: {
|
|
40
|
-
profile: b.model, messages, ...(tools ? { tools } : {}), ...(toolChoice ? { toolChoice } : {}), ...(typeof max === 'number' && max > 0 ? { maxOutputTokens: max } : {}),
|
|
41
|
-
...(typeof b.temperature === 'number' ? { temperature: b.temperature } : {}), ...(b.stream ? { stream: true } : {}),
|
|
42
|
-
context: { purpose: md.purpose ?? opts.purpose ?? 'chat', ...(md.run_ref ? { runRef: md.run_ref } : {}), ...(md.step_ref ? { stepRef: md.step_ref } : {}), ...(md.agent && /^0x[0-9a-fA-F]{40}$/.test(md.agent) ? { agent: md.agent } : {}) },
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
const finishOf = (s) => (s === 'tool' ? 'tool_calls' : s === 'length' ? 'length' : s === 'filtered' ? 'content_filter' : 'stop');
|
|
47
|
-
const usageOf = (u) => ({ prompt_tokens: u.tokensIn, completion_tokens: u.tokensOut, total_tokens: u.tokensIn + u.tokensOut, ...(u.cachedIn ? { prompt_tokens_details: { cached_tokens: u.cachedIn } } : {}), ...(u.reasoningOut ? { completion_tokens_details: { reasoning_tokens: u.reasoningOut } } : {}) });
|
|
48
|
-
export function generateToChatCompletion(res, opts = {}) {
|
|
49
|
-
return {
|
|
50
|
-
id: `chatcmpl-${res.receipt.id}`, object: 'chat.completion', created: opts.created ?? Math.floor(Date.now() / 1000), model: res.receipt.profile,
|
|
51
|
-
choices: [{ index: 0, message: { role: 'assistant', content: res.content || (res.toolCalls.length ? null : ''), ...(res.toolCalls.length ? { tool_calls: res.toolCalls.map((c, i) => ({ id: c.id ?? `call_${res.receipt.id}_${i}`, type: 'function', function: { name: c.name, arguments: JSON.stringify(c.args) } })) } : {}) }, finish_reason: finishOf(res.stopReason) }],
|
|
52
|
-
usage: usageOf(res.usage), ap_receipt: res.receipt,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
/** The OpenAI error envelope for a gateway refusal, with the status the reason implies. */
|
|
56
|
-
export function refusalToChatError(r) {
|
|
57
|
-
const status = r.reason === 'unknown_caller' ? 401 : r.reason === 'not_entitled' ? 403 : r.reason === 'unknown_profile' ? 404 : r.reason === 'over_budget' ? 429 : r.reason === 'invalid_request' ? 400 : r.reason === 'profile_unavailable' ? 503 : r.failureClass === 'rate-limited' ? 429 : r.failureClass === 'timeout' ? 504 : 502;
|
|
58
|
-
const type = status === 401 ? 'authentication_error' : status === 403 ? 'permission_error' : status === 404 ? 'not_found_error' : status === 429 ? 'rate_limit_error' : status === 400 ? 'invalid_request_error' : 'server_error';
|
|
59
|
-
return { status, body: { error: { message: r.detail, type, code: r.reason, ...(r.receiptIds?.length ? { ap_receipts: r.receiptIds } : {}) } } };
|
|
60
|
-
}
|
|
61
|
-
/** One SSE chunk line per stream event; the `done` event yields the final chunk with usage, then `[DONE]`. */
|
|
62
|
-
export function streamEventToChatChunks(e, ctx) {
|
|
63
|
-
const chunk = (delta, finish, usage, extra) => `data: ${JSON.stringify({ id: `chatcmpl-${ctx.id}`, object: 'chat.completion.chunk', created: ctx.created, model: ctx.profile, choices: [{ index: 0, delta, finish_reason: finish }], ...(usage ? { usage } : {}), ...(extra ?? {}) })}\n\n`;
|
|
64
|
-
if (e.type === 'delta')
|
|
65
|
-
return [chunk({ role: 'assistant', content: e.text }, null)];
|
|
66
|
-
if (e.type === 'tool_call')
|
|
67
|
-
return [chunk({ tool_calls: [{ index: 0, ...(e.call.id ? { id: e.call.id } : {}), type: 'function', function: { name: e.call.name, arguments: JSON.stringify(e.call.args) } }] }, null)];
|
|
68
|
-
if (e.type === 'done')
|
|
69
|
-
return [chunk({}, finishOf(e.response.stopReason), usageOf(e.response.usage), { ap_receipt: e.response.receipt }), 'data: [DONE]\n\n'];
|
|
70
|
-
return [`data: ${JSON.stringify({ error: { message: e.message, type: 'server_error', code: e.failureClass ?? 'error' } })}\n\n`, 'data: [DONE]\n\n'];
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=translate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/openai-compat/translate.ts"],"names":[],"mappings":"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"}
|
package/dist/ops.d.ts
DELETED
package/dist/ops.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAwBpG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,EAAE,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,qBAAqB,CAatI"}
|
package/dist/ops.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
const percentile = (sorted, p) => (sorted.length ? sorted[Math.min(sorted.length - 1, Math.max(0, Math.ceil((p / 100) * sorted.length) - 1))] : 0);
|
|
2
|
-
function slice(key, rs) {
|
|
3
|
-
const lat = rs.filter((r) => r.outcome === 'answered').map((r) => r.latencyMs).sort((a, b) => a - b);
|
|
4
|
-
return {
|
|
5
|
-
key, requests: rs.length,
|
|
6
|
-
answered: rs.filter((r) => r.outcome === 'answered').length,
|
|
7
|
-
failed: rs.filter((r) => r.outcome === 'failed').length,
|
|
8
|
-
refused: rs.filter((r) => r.outcome === 'refused').length,
|
|
9
|
-
tokensIn: rs.reduce((n, r) => n + r.usage.tokensIn, 0),
|
|
10
|
-
tokensOut: rs.reduce((n, r) => n + r.usage.tokensOut, 0),
|
|
11
|
-
costMicroUsd: rs.reduce((n, r) => n + r.costMicroUsd, 0),
|
|
12
|
-
fallbacks: rs.filter((r) => !!r.fallbackOf).length,
|
|
13
|
-
latencyP50Ms: percentile(lat, 50), latencyP95Ms: percentile(lat, 95),
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
const group = (rs, by) => {
|
|
17
|
-
const m = new Map();
|
|
18
|
-
for (const r of rs) {
|
|
19
|
-
const k = by(r) ?? '(none)';
|
|
20
|
-
m.set(k, [...(m.get(k) ?? []), r]);
|
|
21
|
-
}
|
|
22
|
-
return [...m.entries()].map(([k, v]) => slice(k, v)).sort((a, b) => b.requests - a.requests);
|
|
23
|
-
};
|
|
24
|
-
export function summarizeReceipts(receipts, window) {
|
|
25
|
-
const from = Date.parse(window.from), to = Date.parse(window.to);
|
|
26
|
-
const rs = receipts.filter((r) => { const t = Date.parse(r.at); return t >= from && t <= to; });
|
|
27
|
-
return {
|
|
28
|
-
window,
|
|
29
|
-
totals: slice('total', rs),
|
|
30
|
-
byClient: group(rs, (r) => r.principal),
|
|
31
|
-
byProfile: group(rs, (r) => r.profile),
|
|
32
|
-
byProvider: group(rs, (r) => r.provider || undefined),
|
|
33
|
-
byModel: group(rs, (r) => (r.provider && r.model ? `${r.provider}/${r.model}` : undefined)),
|
|
34
|
-
byEstate: group(rs, (r) => r.estate),
|
|
35
|
-
pendingReconciliation: rs.filter((r) => r.reconciliation === 'pending').length,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=ops.js.map
|
package/dist/ops.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ops.js","sourceRoot":"","sources":["../src/ops.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { type BudgetLimitsV1, type ClientEntitlementV1, type GenerateRequestV1, type ModelCatalogEntryV1, type ModelProfileV1, type PolicyDecisionV1 } from './contract.js';
|
|
2
|
-
export interface PolicyInput {
|
|
3
|
-
profile: ModelProfileV1 | null;
|
|
4
|
-
/** The whole catalog; eligibility is decided here, never pre-filtered by the store. */
|
|
5
|
-
catalog: readonly ModelCatalogEntryV1[];
|
|
6
|
-
entitlement: ClientEntitlementV1 | null;
|
|
7
|
-
request: Pick<GenerateRequestV1, 'profile' | 'maxOutputTokens' | 'tools' | 'stream'>;
|
|
8
|
-
now?: Date;
|
|
9
|
-
/** Already-computed version (the store caches it); computed here when absent. */
|
|
10
|
-
profileVersion?: string;
|
|
11
|
-
}
|
|
12
|
-
export declare const DEFAULT_MAX_ATTEMPTS = 2;
|
|
13
|
-
/** The limits that apply to one profile for one entitlement: the named row over the `*` row. */
|
|
14
|
-
export declare function limitsFor(entitlement: ClientEntitlementV1 | null, profile: string): BudgetLimitsV1;
|
|
15
|
-
export declare function decidePolicy(input: PolicyInput): Promise<PolicyDecisionV1>;
|
|
16
|
-
/** What the admin page shows before a toggle: the profiles the change would leave with no eligible model (434 §11). */
|
|
17
|
-
export declare function profilesEmptiedBy(input: {
|
|
18
|
-
catalog: readonly ModelCatalogEntryV1[];
|
|
19
|
-
change: {
|
|
20
|
-
provider: string;
|
|
21
|
-
model: string;
|
|
22
|
-
enabled: boolean;
|
|
23
|
-
};
|
|
24
|
-
profiles: readonly ModelProfileV1[];
|
|
25
|
-
}): Promise<string[]>;
|
|
26
|
-
//# sourceMappingURL=policy.d.ts.map
|
package/dist/policy.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAA0B,KAAK,gBAAgB,EACpK,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,uFAAuF;IACvF,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxC,WAAW,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC;IACrF,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAGD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,gGAAgG;AAChG,wBAAgB,SAAS,CAAC,WAAW,EAAE,mBAAmB,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAGlG;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuChF;AAED,uHAAuH;AACvH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASjN"}
|
package/dist/policy.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
// THE POLICY ENGINE — spec 434 §4. A capability names a profile; a profile orders models; a model has one switch in the
|
|
2
|
-
// catalog. This function is the ONLY place that turns (profile, catalog, entitlement, request) into the candidates an
|
|
3
|
-
// attempt may use — the same function the admin page runs to preview what a toggle would empty, so preview and
|
|
4
|
-
// enforcement cannot disagree (the smart-agent TOOL_POLICIES rule). A profile left with no eligible candidate fails
|
|
5
|
-
// closed: `profile_unavailable`, never a borrow from another profile (ADR-0013).
|
|
6
|
-
import { catalogKey, FALLBACK_CLASSES, profileVersion, } from './contract.js';
|
|
7
|
-
const PRIVACY_RANK = { standard: 0, 'no-retention': 1 };
|
|
8
|
-
export const DEFAULT_MAX_ATTEMPTS = 2;
|
|
9
|
-
/** The limits that apply to one profile for one entitlement: the named row over the `*` row. */
|
|
10
|
-
export function limitsFor(entitlement, profile) {
|
|
11
|
-
if (!entitlement)
|
|
12
|
-
return {};
|
|
13
|
-
return { ...(entitlement.limits['*'] ?? {}), ...(entitlement.limits[profile] ?? {}) };
|
|
14
|
-
}
|
|
15
|
-
export async function decidePolicy(input) {
|
|
16
|
-
const id = input.request.profile;
|
|
17
|
-
if (!input.profile)
|
|
18
|
-
return { allowed: false, profile: id, reason: 'unknown_profile', detail: `no profile "${id}" is served here` };
|
|
19
|
-
const version = input.profileVersion ?? (await profileVersion(input.profile));
|
|
20
|
-
const ent = input.entitlement;
|
|
21
|
-
if (!ent)
|
|
22
|
-
return { allowed: false, profile: id, profileVersion: version, reason: 'not_entitled', detail: 'this principal holds no entitlement here' };
|
|
23
|
-
if (ent.validUntil && (input.now ?? new Date()).getTime() > Date.parse(ent.validUntil))
|
|
24
|
-
return { allowed: false, profile: id, profileVersion: version, reason: 'entitlement_expired', detail: `the entitlement expired ${ent.validUntil}` };
|
|
25
|
-
if (!ent.profiles.includes(id) && !ent.profiles.includes('*'))
|
|
26
|
-
return { allowed: false, profile: id, profileVersion: version, reason: 'not_entitled', detail: `this principal is not entitled to profile "${id}" (entitled: ${ent.profiles.join(', ') || 'none'})` };
|
|
27
|
-
const byKey = new Map(input.catalog.map((c) => [catalogKey(c.provider, c.model), c]));
|
|
28
|
-
const required = new Set(input.profile.requiredCapabilities);
|
|
29
|
-
if (input.request.tools?.length)
|
|
30
|
-
required.add('tools');
|
|
31
|
-
if (input.request.stream)
|
|
32
|
-
required.add('stream');
|
|
33
|
-
const floor = Math.max(PRIVACY_RANK[input.profile.privacy], PRIVACY_RANK[ent.privacyFloor ?? 'standard']);
|
|
34
|
-
const candidates = [];
|
|
35
|
-
const skipped = [];
|
|
36
|
-
for (const m of input.profile.models) {
|
|
37
|
-
const entry = byKey.get(catalogKey(m.provider, m.model));
|
|
38
|
-
if (!entry) {
|
|
39
|
-
skipped.push({ provider: m.provider, model: m.model, why: 'not in the catalog' });
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
if (!entry.enabled) {
|
|
43
|
-
skipped.push({ provider: m.provider, model: m.model, why: 'disabled in the catalog' });
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
const missing = [...required].filter((c) => !entry.capabilities.includes(c));
|
|
47
|
-
if (missing.length) {
|
|
48
|
-
skipped.push({ provider: m.provider, model: m.model, why: `lacks ${missing.join(', ')}` });
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (PRIVACY_RANK[entry.privacy] < floor) {
|
|
52
|
-
skipped.push({ provider: m.provider, model: m.model, why: `privacy ${entry.privacy} is below the ${floor === 1 ? 'no-retention' : 'standard'} floor` });
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
candidates.push({ provider: entry.provider, model: entry.model, ...(m.endpoint ?? entry.endpoint ? { endpoint: m.endpoint ?? entry.endpoint } : {}), pricing: entry.pricing, privacy: entry.privacy });
|
|
56
|
-
}
|
|
57
|
-
if (candidates.length === 0)
|
|
58
|
-
return { allowed: false, profile: id, profileVersion: version, reason: 'profile_unavailable', detail: `profile "${id}" has no eligible model: ${skipped.map((s) => `${s.provider}/${s.model} (${s.why})`).join('; ')}`, skipped };
|
|
59
|
-
const limits = limitsFor(ent, id);
|
|
60
|
-
const maxAttempts = Math.max(1, Math.min(limits.maxAttempts ?? DEFAULT_MAX_ATTEMPTS, candidates.length));
|
|
61
|
-
const ceiling = input.profile.maxOutputTokens;
|
|
62
|
-
const asked = input.request.maxOutputTokens;
|
|
63
|
-
return {
|
|
64
|
-
allowed: true, profile: id, profileVersion: version, candidates, skipped,
|
|
65
|
-
maxOutputTokens: asked && asked > 0 ? Math.min(asked, ceiling) : ceiling,
|
|
66
|
-
fallbackOn: input.profile.fallbackOn.filter((c) => FALLBACK_CLASSES.includes(c)),
|
|
67
|
-
timeoutMs: input.profile.timeoutMs,
|
|
68
|
-
maxAttempts,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
/** What the admin page shows before a toggle: the profiles the change would leave with no eligible model (434 §11). */
|
|
72
|
-
export async function profilesEmptiedBy(input) {
|
|
73
|
-
const next = input.catalog.map((c) => (c.provider === input.change.provider && c.model === input.change.model ? { ...c, enabled: input.change.enabled } : c));
|
|
74
|
-
const everyProfile = { principal: '0x0000000000000000000000000000000000000000', kind: 'town-service', profiles: ['*'], limits: {} };
|
|
75
|
-
const out = [];
|
|
76
|
-
for (const p of input.profiles) {
|
|
77
|
-
const d = await decidePolicy({ profile: p, catalog: next, entitlement: everyProfile, request: { profile: p.id } });
|
|
78
|
-
if (!d.allowed && d.reason === 'profile_unavailable')
|
|
79
|
-
out.push(p.id);
|
|
80
|
-
}
|
|
81
|
-
return out;
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=policy.js.map
|
package/dist/policy.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
package/dist/ports.d.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@agenticprimitives/types';
|
|
2
|
-
import type { ClientEntitlementV1, ClientKindV1, FailureClassV1, GenerateRequestV1, InferenceReceiptV1, MessageV1, ModelCatalogEntryV1, ModelProfileV1, ModelUsageV1, StopReasonV1, ToolCallV1, ToolChoiceV1, ToolDefinitionV1 } from './contract.js';
|
|
3
|
-
/** Caller class (a): an app credential. Caller class (b): a session-wrapped A2A assertion over a wire (spec 372 S3c). */
|
|
4
|
-
export type CallerCredentialV1 = {
|
|
5
|
-
kind: 'app-key';
|
|
6
|
-
key: string;
|
|
7
|
-
} | {
|
|
8
|
-
kind: 'session-wire';
|
|
9
|
-
assertion: unknown;
|
|
10
|
-
headers: Record<string, string>;
|
|
11
|
-
method: string;
|
|
12
|
-
};
|
|
13
|
-
export interface ResolvedPrincipalV1 {
|
|
14
|
-
principal: Address;
|
|
15
|
-
principalClass: 'app' | 'wire';
|
|
16
|
-
estate?: string;
|
|
17
|
-
clientKind?: ClientKindV1;
|
|
18
|
-
}
|
|
19
|
-
export interface PrincipalResolverPort {
|
|
20
|
-
/** `null` ⇒ `unknown_caller`. A resolver verifies; it never guesses from `context.agent` (G3). */
|
|
21
|
-
resolve(caller: CallerCredentialV1): Promise<ResolvedPrincipalV1 | null>;
|
|
22
|
-
}
|
|
23
|
-
export interface PolicyStorePort {
|
|
24
|
-
profile(id: string): Promise<{
|
|
25
|
-
profile: ModelProfileV1;
|
|
26
|
-
version: string;
|
|
27
|
-
} | null>;
|
|
28
|
-
catalog(): Promise<ModelCatalogEntryV1[]>;
|
|
29
|
-
entitlement(principal: Address): Promise<ClientEntitlementV1 | null>;
|
|
30
|
-
}
|
|
31
|
-
export interface MeterPort {
|
|
32
|
-
reserve(input: {
|
|
33
|
-
principal: Address;
|
|
34
|
-
profile: string;
|
|
35
|
-
estimateTokens: number;
|
|
36
|
-
estimateMicroUsd: number;
|
|
37
|
-
limits: import('./contract.js').BudgetLimitsV1;
|
|
38
|
-
}): Promise<{
|
|
39
|
-
ok: true;
|
|
40
|
-
reservationId: string;
|
|
41
|
-
} | {
|
|
42
|
-
ok: false;
|
|
43
|
-
reason: string;
|
|
44
|
-
detail: string;
|
|
45
|
-
}>;
|
|
46
|
-
settle(input: {
|
|
47
|
-
principal: Address;
|
|
48
|
-
reservationId: string;
|
|
49
|
-
usage: ModelUsageV1;
|
|
50
|
-
costMicroUsd: number;
|
|
51
|
-
}): Promise<void>;
|
|
52
|
-
/** The attempt ended without usage (timeout, lost connection): the reservation stays and the alarm reconciles or expires it. */
|
|
53
|
-
hold?(input: {
|
|
54
|
-
principal: Address;
|
|
55
|
-
reservationId: string;
|
|
56
|
-
}): Promise<void>;
|
|
57
|
-
}
|
|
58
|
-
export interface ReceiptLedgerPort {
|
|
59
|
-
write(receipt: InferenceReceiptV1): Promise<void>;
|
|
60
|
-
}
|
|
61
|
-
export interface AdapterRequestV1 {
|
|
62
|
-
model: string;
|
|
63
|
-
endpoint?: string;
|
|
64
|
-
messages: MessageV1[];
|
|
65
|
-
tools?: ToolDefinitionV1[];
|
|
66
|
-
toolChoice?: ToolChoiceV1;
|
|
67
|
-
maxOutputTokens: number;
|
|
68
|
-
temperature?: number;
|
|
69
|
-
timeoutMs: number;
|
|
70
|
-
}
|
|
71
|
-
export interface AdapterResultV1 {
|
|
72
|
-
content: string;
|
|
73
|
-
toolCalls: ToolCallV1[];
|
|
74
|
-
stopReason: StopReasonV1;
|
|
75
|
-
usage?: ModelUsageV1;
|
|
76
|
-
providerUsage?: unknown;
|
|
77
|
-
}
|
|
78
|
-
/** A provider failure with its CLASS — the only thing the fallback rule reads (G5). */
|
|
79
|
-
export declare class ProviderFailure extends Error {
|
|
80
|
-
readonly failureClass: FailureClassV1;
|
|
81
|
-
readonly status?: number;
|
|
82
|
-
constructor(failureClass: FailureClassV1, message: string, status?: number);
|
|
83
|
-
}
|
|
84
|
-
export interface ProviderAdapter {
|
|
85
|
-
readonly provider: string;
|
|
86
|
-
generate(req: AdapterRequestV1): Promise<AdapterResultV1>;
|
|
87
|
-
/** Token streaming; absent ⇒ the handler streams the whole answer as one delta (said on the receipt, never silent). */
|
|
88
|
-
stream?(req: AdapterRequestV1, onDelta: (text: string) => void): Promise<AdapterResultV1>;
|
|
89
|
-
}
|
|
90
|
-
/** HTTP status → failure class, the one mapping every adapter uses. */
|
|
91
|
-
export declare function classifyStatus(status: number): FailureClassV1;
|
|
92
|
-
/** A thrown error → its class: a `ProviderFailure` keeps its own; an abort is a timeout; the rest are `unavailable`. */
|
|
93
|
-
export declare function classifyError(e: unknown): FailureClassV1;
|
|
94
|
-
export type GenerateRequestInput = GenerateRequestV1;
|
|
95
|
-
//# sourceMappingURL=ports.d.ts.map
|
package/dist/ports.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"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"}
|
package/dist/ports.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/** A provider failure with its CLASS — the only thing the fallback rule reads (G5). */
|
|
2
|
-
export class ProviderFailure extends Error {
|
|
3
|
-
failureClass;
|
|
4
|
-
status;
|
|
5
|
-
constructor(failureClass, message, status) {
|
|
6
|
-
super(message);
|
|
7
|
-
this.name = 'ProviderFailure';
|
|
8
|
-
this.failureClass = failureClass;
|
|
9
|
-
if (status !== undefined)
|
|
10
|
-
this.status = status;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
/** HTTP status → failure class, the one mapping every adapter uses. */
|
|
14
|
-
export function classifyStatus(status) {
|
|
15
|
-
if (status === 429)
|
|
16
|
-
return 'rate-limited';
|
|
17
|
-
if (status === 401 || status === 403)
|
|
18
|
-
return 'auth';
|
|
19
|
-
if (status === 408 || status === 504)
|
|
20
|
-
return 'timeout';
|
|
21
|
-
if (status >= 500)
|
|
22
|
-
return 'unavailable';
|
|
23
|
-
if (status === 400 || status === 413 || status === 422)
|
|
24
|
-
return 'content';
|
|
25
|
-
return 'malformed';
|
|
26
|
-
}
|
|
27
|
-
/** A thrown error → its class: a `ProviderFailure` keeps its own; an abort is a timeout; the rest are `unavailable`. */
|
|
28
|
-
export function classifyError(e) {
|
|
29
|
-
if (e instanceof ProviderFailure)
|
|
30
|
-
return e.failureClass;
|
|
31
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
32
|
-
const name = e instanceof Error ? e.name : '';
|
|
33
|
-
if (name === 'AbortError' || /abort|timed? ?out/i.test(msg))
|
|
34
|
-
return 'timeout';
|
|
35
|
-
const m = /\b(\d{3})\b/.exec(msg);
|
|
36
|
-
if (m) {
|
|
37
|
-
const c = classifyStatus(Number(m[1]));
|
|
38
|
-
if (c !== 'malformed')
|
|
39
|
-
return c;
|
|
40
|
-
}
|
|
41
|
-
return 'unavailable';
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=ports.js.map
|
package/dist/ports.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"AAmEA,uFAAuF;AACvF,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,YAAY,CAAiB;IAC7B,MAAM,CAAU;IACzB,YAAY,YAA4B,EAAE,OAAe,EAAE,MAAe;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAAC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAAC,IAAI,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAClI,CAAC;CACF;AAQD,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,cAAc,CAAC;IAC1C,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC;IACpD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IACvD,IAAI,MAAM,IAAI,GAAG;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IACzE,OAAO,WAAW,CAAC;AACrB,CAAC;AACD,wHAAwH;AACxH,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,IAAI,CAAC,YAAY,eAAe;QAAE,OAAO,CAAC,CAAC,YAAY,CAAC;IACxD,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,IAAI,IAAI,KAAK,YAAY,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9E,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,WAAW;YAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IACnF,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
package/dist/usage.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { ModelUsageV1 } from './contract.js';
|
|
2
|
-
export interface AnthropicRawUsage {
|
|
3
|
-
input_tokens?: number;
|
|
4
|
-
output_tokens?: number;
|
|
5
|
-
cache_read_input_tokens?: number;
|
|
6
|
-
cache_creation_input_tokens?: number;
|
|
7
|
-
}
|
|
8
|
-
export interface OpenAiRawUsage {
|
|
9
|
-
prompt_tokens?: number;
|
|
10
|
-
completion_tokens?: number;
|
|
11
|
-
total_tokens?: number;
|
|
12
|
-
prompt_tokens_details?: {
|
|
13
|
-
cached_tokens?: number;
|
|
14
|
-
};
|
|
15
|
-
completion_tokens_details?: {
|
|
16
|
-
reasoning_tokens?: number;
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export declare function normalizeAnthropicUsage(u: AnthropicRawUsage | undefined | null): ModelUsageV1 | undefined;
|
|
20
|
-
export declare function normalizeOpenAiUsage(u: OpenAiRawUsage | undefined | null): ModelUsageV1 | undefined;
|
|
21
|
-
/** The usage a receipt carries when the provider reported none: zeros, flagged so the reconciler can read it back later. */
|
|
22
|
-
export declare const UNKNOWN_USAGE: ModelUsageV1;
|
|
23
|
-
//# sourceMappingURL=usage.d.ts.map
|
package/dist/usage.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAAG,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAAC,2BAA2B,CAAC,EAAE,MAAM,CAAA;CAAE;AAC5J,MAAM,WAAW,cAAc;IAAG,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,yBAAyB,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAI5N,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,GAAG,YAAY,GAAG,SAAS,CAIzG;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,GAAG,YAAY,GAAG,SAAS,CAInG;AAED,4HAA4H;AAC5H,eAAO,MAAM,aAAa,EAAE,YAA4C,CAAC"}
|
package/dist/usage.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
const n = (x) => (typeof x === 'number' && Number.isFinite(x) && x > 0 ? x : 0);
|
|
2
|
-
export function normalizeAnthropicUsage(u) {
|
|
3
|
-
if (!u || (typeof u.input_tokens !== 'number' && typeof u.output_tokens !== 'number'))
|
|
4
|
-
return undefined;
|
|
5
|
-
const cached = n(u.cache_read_input_tokens);
|
|
6
|
-
return { tokensIn: n(u.input_tokens) + cached + n(u.cache_creation_input_tokens), tokensOut: n(u.output_tokens), ...(cached ? { cachedIn: cached } : {}) };
|
|
7
|
-
}
|
|
8
|
-
export function normalizeOpenAiUsage(u) {
|
|
9
|
-
if (!u || (typeof u.prompt_tokens !== 'number' && typeof u.completion_tokens !== 'number'))
|
|
10
|
-
return undefined;
|
|
11
|
-
const cached = n(u.prompt_tokens_details?.cached_tokens), reasoning = n(u.completion_tokens_details?.reasoning_tokens);
|
|
12
|
-
return { tokensIn: n(u.prompt_tokens), tokensOut: n(u.completion_tokens), ...(cached ? { cachedIn: cached } : {}), ...(reasoning ? { reasoningOut: reasoning } : {}) };
|
|
13
|
-
}
|
|
14
|
-
/** The usage a receipt carries when the provider reported none: zeros, flagged so the reconciler can read it back later. */
|
|
15
|
-
export const UNKNOWN_USAGE = { tokensIn: 0, tokensOut: 0 };
|
|
16
|
-
//# sourceMappingURL=usage.js.map
|