@sentropic/llm-mesh 0.28.0 → 0.29.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/README.md +110 -0
- package/dist/capabilities.d.ts +3 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/catalog.d.ts +134 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +15 -0
- package/dist/catalog.js.map +1 -1
- package/dist/decision/adapter-result.d.ts +6 -0
- package/dist/decision/adapter-result.d.ts.map +1 -0
- package/dist/decision/adapter-result.js +160 -0
- package/dist/decision/adapter-result.js.map +1 -0
- package/dist/decision/adapter.d.ts +58 -0
- package/dist/decision/adapter.d.ts.map +1 -0
- package/dist/decision/adapter.js +70 -0
- package/dist/decision/adapter.js.map +1 -0
- package/dist/decision/admission.d.ts +23 -0
- package/dist/decision/admission.d.ts.map +1 -0
- package/dist/decision/admission.js +115 -0
- package/dist/decision/admission.js.map +1 -0
- package/dist/decision/budget.d.ts +60 -0
- package/dist/decision/budget.d.ts.map +1 -0
- package/dist/decision/budget.js +2 -0
- package/dist/decision/budget.js.map +1 -0
- package/dist/decision/client.d.ts +23 -0
- package/dist/decision/client.d.ts.map +1 -0
- package/dist/decision/client.js +836 -0
- package/dist/decision/client.js.map +1 -0
- package/dist/decision/criterion.d.ts +5 -0
- package/dist/decision/criterion.d.ts.map +1 -0
- package/dist/decision/criterion.js +54 -0
- package/dist/decision/criterion.js.map +1 -0
- package/dist/decision/deadline.d.ts +8 -0
- package/dist/decision/deadline.d.ts.map +1 -0
- package/dist/decision/deadline.js +56 -0
- package/dist/decision/deadline.js.map +1 -0
- package/dist/decision/descriptor-validation.d.ts +5 -0
- package/dist/decision/descriptor-validation.d.ts.map +1 -0
- package/dist/decision/descriptor-validation.js +99 -0
- package/dist/decision/descriptor-validation.js.map +1 -0
- package/dist/decision/descriptor.d.ts +81 -0
- package/dist/decision/descriptor.d.ts.map +1 -0
- package/dist/decision/descriptor.js +36 -0
- package/dist/decision/descriptor.js.map +1 -0
- package/dist/decision/dispatch.d.ts +11 -0
- package/dist/decision/dispatch.d.ts.map +1 -0
- package/dist/decision/dispatch.js +59 -0
- package/dist/decision/dispatch.js.map +1 -0
- package/dist/decision/errors.d.ts +43 -0
- package/dist/decision/errors.d.ts.map +1 -0
- package/dist/decision/errors.js +47 -0
- package/dist/decision/errors.js.map +1 -0
- package/dist/decision/execution.d.ts +31 -0
- package/dist/decision/execution.d.ts.map +1 -0
- package/dist/decision/execution.js +79 -0
- package/dist/decision/execution.js.map +1 -0
- package/dist/decision/host-options.d.ts +26 -0
- package/dist/decision/host-options.d.ts.map +1 -0
- package/dist/decision/host-options.js +2 -0
- package/dist/decision/host-options.js.map +1 -0
- package/dist/decision/host.d.ts +19 -0
- package/dist/decision/host.d.ts.map +1 -0
- package/dist/decision/host.js +9 -0
- package/dist/decision/host.js.map +1 -0
- package/dist/decision/index.d.ts +12 -0
- package/dist/decision/index.d.ts.map +1 -0
- package/dist/decision/index.js +3 -0
- package/dist/decision/index.js.map +1 -0
- package/dist/decision/jev-codec.d.ts +30 -0
- package/dist/decision/jev-codec.d.ts.map +1 -0
- package/dist/decision/jev-codec.js +51 -0
- package/dist/decision/jev-codec.js.map +1 -0
- package/dist/decision/jev-response.d.ts +7 -0
- package/dist/decision/jev-response.d.ts.map +1 -0
- package/dist/decision/jev-response.js +46 -0
- package/dist/decision/jev-response.js.map +1 -0
- package/dist/decision/jev-verdict.d.ts +14 -0
- package/dist/decision/jev-verdict.d.ts.map +1 -0
- package/dist/decision/jev-verdict.js +76 -0
- package/dist/decision/jev-verdict.js.map +1 -0
- package/dist/decision/openai-adapter.d.ts +46 -0
- package/dist/decision/openai-adapter.d.ts.map +1 -0
- package/dist/decision/openai-adapter.js +66 -0
- package/dist/decision/openai-adapter.js.map +1 -0
- package/dist/decision/openai-codec.d.ts +7 -0
- package/dist/decision/openai-codec.d.ts.map +1 -0
- package/dist/decision/openai-codec.js +60 -0
- package/dist/decision/openai-codec.js.map +1 -0
- package/dist/decision/openai-descriptor.d.ts +7 -0
- package/dist/decision/openai-descriptor.d.ts.map +1 -0
- package/dist/decision/openai-descriptor.js +31 -0
- package/dist/decision/openai-descriptor.js.map +1 -0
- package/dist/decision/openai-request.d.ts +15 -0
- package/dist/decision/openai-request.d.ts.map +1 -0
- package/dist/decision/openai-request.js +33 -0
- package/dist/decision/openai-request.js.map +1 -0
- package/dist/decision/openai-verdict.d.ts +9 -0
- package/dist/decision/openai-verdict.d.ts.map +1 -0
- package/dist/decision/openai-verdict.js +76 -0
- package/dist/decision/openai-verdict.js.map +1 -0
- package/dist/decision/policy.d.ts +11 -0
- package/dist/decision/policy.d.ts.map +1 -0
- package/dist/decision/policy.js +34 -0
- package/dist/decision/policy.js.map +1 -0
- package/dist/decision/pricing.d.ts +40 -0
- package/dist/decision/pricing.d.ts.map +1 -0
- package/dist/decision/pricing.js +65 -0
- package/dist/decision/pricing.js.map +1 -0
- package/dist/decision/raw.d.ts +7 -0
- package/dist/decision/raw.d.ts.map +1 -0
- package/dist/decision/raw.js +53 -0
- package/dist/decision/raw.js.map +1 -0
- package/dist/decision/receipt.d.ts +120 -0
- package/dist/decision/receipt.d.ts.map +1 -0
- package/dist/decision/receipt.js +58 -0
- package/dist/decision/receipt.js.map +1 -0
- package/dist/decision/request-policy.d.ts +3 -0
- package/dist/decision/request-policy.d.ts.map +1 -0
- package/dist/decision/request-policy.js +19 -0
- package/dist/decision/request-policy.js.map +1 -0
- package/dist/decision/request.d.ts +85 -0
- package/dist/decision/request.d.ts.map +1 -0
- package/dist/decision/request.js +49 -0
- package/dist/decision/request.js.map +1 -0
- package/dist/decision/service.d.ts +39 -0
- package/dist/decision/service.d.ts.map +1 -0
- package/dist/decision/service.js +139 -0
- package/dist/decision/service.js.map +1 -0
- package/dist/decision/structured.d.ts +125 -0
- package/dist/decision/structured.d.ts.map +1 -0
- package/dist/decision/structured.js +250 -0
- package/dist/decision/structured.js.map +1 -0
- package/dist/decision/validate-result.d.ts +8 -0
- package/dist/decision/validate-result.d.ts.map +1 -0
- package/dist/decision/validate-result.js +91 -0
- package/dist/decision/validate-result.js.map +1 -0
- package/dist/decision/validation-context.d.ts +55 -0
- package/dist/decision/validation-context.d.ts.map +1 -0
- package/dist/decision/validation-context.js +134 -0
- package/dist/decision/validation-context.js.map +1 -0
- package/dist/decision/validation.d.ts +19 -0
- package/dist/decision/validation.d.ts.map +1 -0
- package/dist/decision/validation.js +86 -0
- package/dist/decision/validation.js.map +1 -0
- package/dist/decision/verdict.d.ts +81 -0
- package/dist/decision/verdict.d.ts.map +1 -0
- package/dist/decision/verdict.js +140 -0
- package/dist/decision/verdict.js.map +1 -0
- package/dist/providers.d.ts +4 -3
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +2 -1
- package/dist/providers.js.map +1 -1
- package/dist/registry.d.ts +6 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js.map +1 -1
- package/dist/transport/jev.d.ts +23 -0
- package/dist/transport/jev.d.ts.map +1 -0
- package/dist/transport/jev.js +107 -0
- package/dist/transport/jev.js.map +1 -0
- package/dist/transport/openai-decisions.d.ts +23 -0
- package/dist/transport/openai-decisions.d.ts.map +1 -0
- package/dist/transport/openai-decisions.js +107 -0
- package/dist/transport/openai-decisions.js.map +1 -0
- package/package.json +13 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jev-verdict.js","sourceRoot":"","sources":["../../src/decision/jev-verdict.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ProviderAdapter, ProviderRuntimeContext } from '../registry.js';
|
|
2
|
+
import type { GenerateRequest, GenerateResponse, StreamRequest, StreamResult } from '../generation.js';
|
|
3
|
+
import type { AuthInput } from '../auth.js';
|
|
4
|
+
import type { DecisionRequest } from './request.js';
|
|
5
|
+
import type { DecisionAdapterResult } from './adapter.js';
|
|
6
|
+
import type { DecisionEvaluatorDescriptor } from './descriptor.js';
|
|
7
|
+
import type { OpenAiDecisionsTransport } from '../transport/openai-decisions.js';
|
|
8
|
+
export interface OpenAiDecisionsAdapterOptions {
|
|
9
|
+
transport: OpenAiDecisionsTransport;
|
|
10
|
+
descriptor?: DecisionEvaluatorDescriptor;
|
|
11
|
+
}
|
|
12
|
+
/** Explicit native registration; ordinary OpenAI chat composition never acquires it. */
|
|
13
|
+
export declare class OpenAiDecisionsAdapter implements ProviderAdapter {
|
|
14
|
+
private readonly options;
|
|
15
|
+
readonly provider: {
|
|
16
|
+
providerId: "openai";
|
|
17
|
+
family: "openai";
|
|
18
|
+
label: string;
|
|
19
|
+
decisionOnly: true;
|
|
20
|
+
status: import("../providers.js").ProviderStatus;
|
|
21
|
+
capabilities: import("../capabilities.js").ProviderCapabilities;
|
|
22
|
+
};
|
|
23
|
+
readonly descriptor: DecisionEvaluatorDescriptor;
|
|
24
|
+
constructor(options: OpenAiDecisionsAdapterOptions);
|
|
25
|
+
listModels(): never[];
|
|
26
|
+
listEvaluators(): {
|
|
27
|
+
providerId: "openai" | "gemini" | "anthropic" | "mistral" | "cohere" | "gcp" | "local" | "muse" | "typesafe";
|
|
28
|
+
evaluatorId: string;
|
|
29
|
+
revision: string;
|
|
30
|
+
}[];
|
|
31
|
+
validateAuth(source?: AuthInput): {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
};
|
|
34
|
+
generate(_request: GenerateRequest): Promise<GenerateResponse>;
|
|
35
|
+
stream(_request: StreamRequest): Promise<StreamResult>;
|
|
36
|
+
normalizeError(_error: unknown): {
|
|
37
|
+
providerId: "openai";
|
|
38
|
+
message: string;
|
|
39
|
+
retryable: boolean;
|
|
40
|
+
};
|
|
41
|
+
decision(request: DecisionRequest, context?: ProviderRuntimeContext & {
|
|
42
|
+
signal?: AbortSignal;
|
|
43
|
+
}): Promise<DecisionAdapterResult>;
|
|
44
|
+
}
|
|
45
|
+
export declare const createOpenAiDecisionsAdapter: (options: OpenAiDecisionsAdapterOptions) => OpenAiDecisionsAdapter;
|
|
46
|
+
//# sourceMappingURL=openai-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../src/decision/openai-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAQjF,MAAM,WAAW,6BAA6B;IAAG,SAAS,EAAE,wBAAwB,CAAC;IAAC,UAAU,CAAC,EAAE,2BAA2B,CAAA;CAAE;AAChI,wFAAwF;AACxF,qBAAa,sBAAuB,YAAW,eAAe;IAIhD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,QAAQ;;;;;;;MACqE;IACtF,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;gBACpB,OAAO,EAAE,6BAA6B;IAWnE,UAAU;IACV,cAAc;;;;;IACd,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS;;;IAKzB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAC9D,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAC5D,cAAc,CAAC,MAAM,EAAE,OAAO;;;;;IACxB,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAqBtI;AACD,eAAO,MAAM,4BAA4B,YAAa,6BAA6B,KAAG,sBAA6D,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { getSecretAuthMaterial } from '../auth.js';
|
|
2
|
+
import { getProviderProfile } from '../catalog.js';
|
|
3
|
+
import { openAiDecisionsDescriptor } from './openai-descriptor.js';
|
|
4
|
+
import { parseDecisionEvaluatorDescriptor } from './descriptor-validation.js';
|
|
5
|
+
import { encodeOpenAiDecisionsRequest, decodeOpenAiDecisionsResponse } from './openai-codec.js';
|
|
6
|
+
import { createDecisionError } from './errors.js';
|
|
7
|
+
import { unreportedDecisionUsage } from './receipt.js';
|
|
8
|
+
import { isRecord, snapshotBoundedJson } from './validation.js';
|
|
9
|
+
/** Explicit native registration; ordinary OpenAI chat composition never acquires it. */
|
|
10
|
+
export class OpenAiDecisionsAdapter {
|
|
11
|
+
options;
|
|
12
|
+
provider = { ...getProviderProfile('typesafe'), providerId: 'openai',
|
|
13
|
+
family: 'openai', label: 'OpenAI Decisions', decisionOnly: true };
|
|
14
|
+
descriptor;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.options = options;
|
|
17
|
+
const descriptor = parseDecisionEvaluatorDescriptor(options.descriptor ?? openAiDecisionsDescriptor);
|
|
18
|
+
if (!descriptor || descriptor.protocol !== 'openai-decisions' || descriptor.evaluator.providerId !== 'openai'
|
|
19
|
+
|| descriptor.wireModel !== 'gpt-6-luna' || descriptor.nativeDecision || descriptor.maxBillableOutputTokens !== 0
|
|
20
|
+
|| descriptor.compilation.readout !== 'openai-decisions-v1'
|
|
21
|
+
|| descriptor.compilation.templateDigest !== openAiDecisionsDescriptor.compilation.templateDigest
|
|
22
|
+
|| descriptor.compilation.schemaDigest !== openAiDecisionsDescriptor.compilation.schemaDigest
|
|
23
|
+
|| descriptor.definition.validationProfile.profile !== 'native-distribution-v1'
|
|
24
|
+
|| descriptor.definition.validationProfile.version !== 'v1')
|
|
25
|
+
throw new Error('Invalid OpenAI Decisions descriptor.');
|
|
26
|
+
this.descriptor = descriptor;
|
|
27
|
+
}
|
|
28
|
+
listModels() { return []; }
|
|
29
|
+
listEvaluators() { return [{ ...this.descriptor.evaluator }]; }
|
|
30
|
+
validateAuth(source) {
|
|
31
|
+
const auth = getSecretAuthMaterial(source);
|
|
32
|
+
return { ok: auth?.type === 'environment-token' && auth.envVar === 'OPENAI_API_KEY' && typeof auth.token === 'string'
|
|
33
|
+
&& auth.token.trim().length > 0 && auth.token === auth.token.trim() && !/[\r\n]/.test(auth.token) };
|
|
34
|
+
}
|
|
35
|
+
async generate(_request) { throw new Error('Decisions does not support chat.'); }
|
|
36
|
+
async stream(_request) { throw new Error('Decisions does not support chat.'); }
|
|
37
|
+
normalizeError(_error) { return { providerId: 'openai', message: 'Decisions operation failed.', retryable: false }; }
|
|
38
|
+
async decision(request, context) {
|
|
39
|
+
const empty = { usage: unreportedDecisionUsage('not-dispatched'), servedEvaluator: null, servedModelId: null };
|
|
40
|
+
const failed = (code, phase = 'preflight') => ({ ok: false, error: createDecisionError(code, phase), ...empty,
|
|
41
|
+
...(phase === 'dispatch' ? { usage: unreportedDecisionUsage('unknown') } : {}) });
|
|
42
|
+
const encoded = encodeOpenAiDecisionsRequest(request, this.descriptor);
|
|
43
|
+
if (!encoded.ok)
|
|
44
|
+
return failed(encoded.code);
|
|
45
|
+
if (this.descriptor.qualification.servedIdentity !== 'qualified')
|
|
46
|
+
return failed('PROVIDER_UNAVAILABLE');
|
|
47
|
+
const auth = getSecretAuthMaterial(context?.auth);
|
|
48
|
+
if (!this.validateAuth(context?.auth).ok || auth?.type !== 'environment-token' || !auth.token)
|
|
49
|
+
return failed('CREDENTIAL_MISSING');
|
|
50
|
+
try {
|
|
51
|
+
const result = await this.options.transport.send(encoded.bodyJson, auth.token, { signal: context?.signal, timeoutMs: encoded.request.policy?.timeoutMs });
|
|
52
|
+
if (!result.ok)
|
|
53
|
+
return { ...failed(result.error.code, 'dispatch'), error: result.error };
|
|
54
|
+
const snapshot = snapshotBoundedJson(result.body);
|
|
55
|
+
const body = snapshot.ok ? snapshot.value : null;
|
|
56
|
+
if (isRecord(body) && typeof body.model === 'string' && body.model.includes(auth.token))
|
|
57
|
+
body.model = null;
|
|
58
|
+
return decodeOpenAiDecisionsResponse(body, encoded.request, this.descriptor, result.providerRequestId?.includes(auth.token) ? undefined : result.providerRequestId);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return failed('TRANSPORT_FAILED', 'dispatch');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export const createOpenAiDecisionsAdapter = (options) => new OpenAiDecisionsAdapter(options);
|
|
66
|
+
//# sourceMappingURL=openai-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../../src/decision/openai-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DecisionRequest } from './request.js';
|
|
2
|
+
import type { DecisionEvaluatorDescriptor } from './descriptor.js';
|
|
3
|
+
import type { DecisionAdapterResult } from './adapter.js';
|
|
4
|
+
export { encodeOpenAiDecisionsRequest } from './openai-request.js';
|
|
5
|
+
/** Independently validate usage and identity even when the named answer is refused. */
|
|
6
|
+
export declare function decodeOpenAiDecisionsResponse(candidate: unknown, request: DecisionRequest, descriptor: DecisionEvaluatorDescriptor, requestId?: unknown): DecisionAdapterResult;
|
|
7
|
+
//# sourceMappingURL=openai-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-codec.d.ts","sourceRoot":"","sources":["../../src/decision/openai-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAO1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAInE,uFAAuF;AACvF,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EACxF,UAAU,EAAE,2BAA2B,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,qBAAqB,CA0CrF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { createDecisionError } from './errors.js';
|
|
2
|
+
import { unreportedDecisionUsage } from './receipt.js';
|
|
3
|
+
import { sanitizeJevId } from './jev-response.js';
|
|
4
|
+
import { hasOnlyKeys, isRecord, snapshotBoundedJson } from './validation.js';
|
|
5
|
+
import { encodeOpenAiDecisionsRequest } from './openai-request.js';
|
|
6
|
+
import { decodeOpenAiDecisionsVerdict } from './openai-verdict.js';
|
|
7
|
+
export { encodeOpenAiDecisionsRequest } from './openai-request.js';
|
|
8
|
+
const count = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
9
|
+
/** Independently validate usage and identity even when the named answer is refused. */
|
|
10
|
+
export function decodeOpenAiDecisionsResponse(candidate, request, descriptor, requestId) {
|
|
11
|
+
const snapshot = snapshotBoundedJson(candidate);
|
|
12
|
+
const body = snapshot.ok && isRecord(snapshot.value) ? snapshot.value : null;
|
|
13
|
+
const native = isRecord(body?.usage) ? body.usage : {};
|
|
14
|
+
const input = count(native.input_tokens) ? native.input_tokens : null;
|
|
15
|
+
const output = count(native.output_tokens) ? native.output_tokens : null;
|
|
16
|
+
const sum = input !== null && output !== null && count(input + output) ? input + output : null;
|
|
17
|
+
const token = (value) => value === null ? { value: null, source: 'not-reported' }
|
|
18
|
+
: { value, source: 'provider' };
|
|
19
|
+
const usage = unreportedDecisionUsage('unknown');
|
|
20
|
+
usage.tokens = { input: token(input), output: token(output), total: token(count(native.total_tokens) && native.total_tokens === sum ? sum : null) };
|
|
21
|
+
const answered = Array.isArray(body?.answers) && body.answers.length === 1 && isRecord(body.answers[0]) && body.answers[0].name === 'verdict';
|
|
22
|
+
usage.evaluatorCalls = answered ? 1 : null;
|
|
23
|
+
usage.explanations = answered ? 0 : null;
|
|
24
|
+
const servedModelId = sanitizeJevId(body?.model);
|
|
25
|
+
const matched = servedModelId !== null && descriptor.qualification.servedIdentity === 'qualified'
|
|
26
|
+
&& descriptor.acceptedServedModelIds.includes(servedModelId);
|
|
27
|
+
const providerRequestId = sanitizeJevId(requestId);
|
|
28
|
+
const evidence = { usage, servedModelId, servedEvaluator: matched ? { ...descriptor.evaluator } : null,
|
|
29
|
+
...(providerRequestId ? { providerRequestId } : {}) };
|
|
30
|
+
const failed = (code) => {
|
|
31
|
+
// Contradictory or unpriced details invalidate the counters as billing evidence.
|
|
32
|
+
if (code === 'USAGE_INVALID')
|
|
33
|
+
usage.tokens = unreportedDecisionUsage('unknown').tokens;
|
|
34
|
+
return { ok: false, error: createDecisionError(code, 'parse'), ...evidence };
|
|
35
|
+
};
|
|
36
|
+
if (!body || !hasOnlyKeys(body, ['model', 'answers', 'usage']))
|
|
37
|
+
return failed('VERDICT_INVALID');
|
|
38
|
+
if (!matched)
|
|
39
|
+
return failed('SERVED_IDENTITY_MISMATCH');
|
|
40
|
+
const cache = native.input_tokens_details;
|
|
41
|
+
const reasoning = native.output_tokens_details;
|
|
42
|
+
if (input === null || output === null || sum === null || native.total_tokens !== sum
|
|
43
|
+
|| !hasOnlyKeys(native, ['input_tokens', 'output_tokens', 'total_tokens', 'input_tokens_details', 'output_tokens_details'])
|
|
44
|
+
|| !isRecord(cache) || !hasOnlyKeys(cache, ['cached_tokens', 'cache_write_tokens'])
|
|
45
|
+
|| cache.cached_tokens !== 0 || cache.cache_write_tokens !== 0
|
|
46
|
+
|| !isRecord(reasoning) || !hasOnlyKeys(reasoning, ['reasoning_tokens'])
|
|
47
|
+
|| !count(reasoning.reasoning_tokens) || reasoning.reasoning_tokens > output)
|
|
48
|
+
return failed('USAGE_INVALID');
|
|
49
|
+
if (!answered)
|
|
50
|
+
return failed('VERDICT_INVALID');
|
|
51
|
+
const answer = body.answers[0];
|
|
52
|
+
if (answer.type === 'refusal')
|
|
53
|
+
return failed(hasOnlyKeys(answer, ['name', 'type']) ? 'PROVIDER_REJECTED' : 'VERDICT_INVALID');
|
|
54
|
+
const encoded = encodeOpenAiDecisionsRequest(request, descriptor);
|
|
55
|
+
if (!encoded.ok)
|
|
56
|
+
return failed(encoded.code);
|
|
57
|
+
const verdict = decodeOpenAiDecisionsVerdict(answer, encoded.request, encoded.criterion, descriptor);
|
|
58
|
+
return verdict ? { ok: true, verdict, ...evidence } : failed('VERDICT_INVALID');
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=openai-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-codec.js","sourceRoot":"","sources":["../../src/decision/openai-codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DecisionEvaluatorDescriptor } from './descriptor.js';
|
|
2
|
+
import type { DecisionPrice } from './pricing.js';
|
|
3
|
+
/** Documented candidate only. Account entitlement and stable selection are unverified. */
|
|
4
|
+
export declare const openAiDecisionsDescriptor: DecisionEvaluatorDescriptor;
|
|
5
|
+
/** Published standard/no-cache rate projection; the host must supply its authoritative row. */
|
|
6
|
+
export declare const openAiDecisionsPrice: DecisionPrice;
|
|
7
|
+
//# sourceMappingURL=openai-descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-descriptor.d.ts","sourceRoot":"","sources":["../../src/decision/openai-descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,0FAA0F;AAC1F,eAAO,MAAM,yBAAyB,EAAE,2BAmBvC,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,oBAAoB,EAAE,aAIlC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { digestStructuredArtifact } from './validation.js';
|
|
2
|
+
const contract = 'openai-decisions-v1';
|
|
3
|
+
const digest = (value) => digestStructuredArtifact(value);
|
|
4
|
+
/** Documented candidate only. Account entitlement and stable selection are unverified. */
|
|
5
|
+
export const openAiDecisionsDescriptor = {
|
|
6
|
+
evaluator: { providerId: 'openai', evaluatorId: 'gpt-6-luna-decisions', revision: 'gpt-6-luna-decisions-v1-unqualified' },
|
|
7
|
+
protocol: 'openai-decisions', wireModel: 'gpt-6-luna', acceptedServedModelIds: [],
|
|
8
|
+
qualification: { servedIdentity: 'unqualified', billingBound: 'unqualified', evidenceRefs: [] },
|
|
9
|
+
maxBillableInputTokens: 2048, maxBillableOutputTokens: 0,
|
|
10
|
+
maxRequestBytes: 256 * 1024, maxStateQuestionBytes: 32 * 1024,
|
|
11
|
+
probabilityTolerance: 1e-4, scoreNativeKeys: 'index-string', nativeDecision: false,
|
|
12
|
+
confidence: { meaning: 'provider-confidence',
|
|
13
|
+
meaningRef: 'https://developers.openai.com/api/docs/guides/decisions#interpret-the-answers', min: 0, max: 1 },
|
|
14
|
+
compilation: { templateDigest: digest({ contract, input: 'json-data', question: 'verdict', cache: 'disabled' }),
|
|
15
|
+
schemaDigest: digest({ contract, answers: ['predicate', 'choice', 'score', 'refusal'] }), readout: contract },
|
|
16
|
+
definition: { validationProfile: { profile: 'native-distribution-v1', version: 'v1' },
|
|
17
|
+
kinds: ['binary', 'choice', 'graded'].map((kind) => ({ kind, schemaDigest: digest({ contract, kind }) })),
|
|
18
|
+
evidenceRequirements: ['served-identity', 'reported-usage', 'one-named-answer'],
|
|
19
|
+
executionDigest: digest({ contract, attempts: 1, cache: 'disabled', maxBillableInputTokens: 2048, maxBillableOutputTokens: 0 }),
|
|
20
|
+
bundleDigest: digest({ contract, qualification: 'unqualified', sourceDate: '2026-10-26' }) },
|
|
21
|
+
priceProtocol: { authority: 'control.model_pricing', revision: 'openai-decisions-standard-no-cache-2026-10-26' },
|
|
22
|
+
registeredCriteria: [], retention: { status: 'unknown', basis: 'published-policy', retentionDays: null,
|
|
23
|
+
gap: 'unknown (source-gap)', evidenceRefs: ['https://developers.openai.com/api/docs/guides/your-data'] },
|
|
24
|
+
};
|
|
25
|
+
/** Published standard/no-cache rate projection; the host must supply its authoritative row. */
|
|
26
|
+
export const openAiDecisionsPrice = {
|
|
27
|
+
providerId: 'openai', modelId: 'gpt-6-luna', ...{ priceRevision: openAiDecisionsDescriptor.priceProtocol.revision },
|
|
28
|
+
authority: 'control.model_pricing', protocol: 'openai-decisions', inputMicroUsdPerMtok: '100000',
|
|
29
|
+
outputMicroUsdPerMtok: '0', minimumMicroUsd: '0', identityMismatchPricing: 'requires-reconciliation',
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=openai-descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-descriptor.js","sourceRoot":"","sources":["../../src/decision/openai-descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DecisionRequest } from './request.js';
|
|
2
|
+
import type { DecisionEvaluatorDescriptor, ResolvedDecisionCriterion } from './descriptor.js';
|
|
3
|
+
import type { DecisionErrorCode } from './errors.js';
|
|
4
|
+
export type OpenAiDecisionsEncoding = {
|
|
5
|
+
ok: true;
|
|
6
|
+
request: DecisionRequest;
|
|
7
|
+
criterion: ResolvedDecisionCriterion;
|
|
8
|
+
bodyJson: string;
|
|
9
|
+
} | {
|
|
10
|
+
ok: false;
|
|
11
|
+
code: DecisionErrorCode;
|
|
12
|
+
};
|
|
13
|
+
/** Dedicated one-question protocol; evidence stays in input data, never in instructions. */
|
|
14
|
+
export declare function encodeOpenAiDecisionsRequest(candidate: unknown, descriptor: DecisionEvaluatorDescriptor): OpenAiDecisionsEncoding;
|
|
15
|
+
//# sourceMappingURL=openai-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-request.d.ts","sourceRoot":"","sources":["../../src/decision/openai-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,MAAM,uBAAuB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,yBAAyB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChI;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAE3C,4FAA4F;AAC5F,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,2BAA2B,GAAG,uBAAuB,CA0BjI"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { parseDecisionRequest } from './request.js';
|
|
2
|
+
/** Dedicated one-question protocol; evidence stays in input data, never in instructions. */
|
|
3
|
+
export function encodeOpenAiDecisionsRequest(candidate, descriptor) {
|
|
4
|
+
const parsed = parseDecisionRequest(candidate);
|
|
5
|
+
if (!parsed.ok)
|
|
6
|
+
return parsed;
|
|
7
|
+
const request = parsed.request;
|
|
8
|
+
if (descriptor.protocol !== 'openai-decisions' || request.evaluator.providerId !== descriptor.evaluator.providerId
|
|
9
|
+
|| request.evaluator.evaluatorId !== descriptor.evaluator.evaluatorId)
|
|
10
|
+
return { ok: false, code: 'EVALUATOR_UNKNOWN' };
|
|
11
|
+
if (request.evaluator.revision !== descriptor.evaluator.revision)
|
|
12
|
+
return { ok: false, code: 'REVISION_MISMATCH' };
|
|
13
|
+
const ref = request.criterion;
|
|
14
|
+
const criterion = ref.kind === 'registered' ? descriptor.registeredCriteria.find((entry) => entry.criteriaId === ref.criteriaId && entry.revision === ref.revision)?.criterion : ref;
|
|
15
|
+
if (!criterion || (criterion.kind === 'choice' && (criterion.options.length < 2 || criterion.options.length > 255))
|
|
16
|
+
|| (criterion.kind === 'graded' && (criterion.levels.length < 2 || criterion.levels.length > 10))
|
|
17
|
+
|| request.policy?.explanation === 'required' || request.decision?.kind === 'provider')
|
|
18
|
+
return { ok: false, code: 'CAPABILITY_UNSUPPORTED' };
|
|
19
|
+
const question = { name: 'verdict', instructions: criterion.kind === 'binary' && criterion.criteria
|
|
20
|
+
? JSON.stringify({ instructions: criterion.instructions, criteria: criterion.criteria }) : criterion.instructions,
|
|
21
|
+
type: criterion.kind === 'binary' ? 'predicate' : criterion.kind === 'graded' ? 'score' : 'choice',
|
|
22
|
+
...(criterion.kind === 'choice' ? { choices: criterion.options.map((option) => ({ value: option.id, description: option.description })) } : {}),
|
|
23
|
+
...(criterion.kind === 'graded' ? { levels: criterion.levels.map((level) => ({ label: level.label, description: level.description })) } : {}) };
|
|
24
|
+
const input = JSON.stringify(request.inputs);
|
|
25
|
+
// Explicit mode without breakpoints disables the currently documented implicit cache.
|
|
26
|
+
const bodyJson = JSON.stringify({ model: descriptor.wireModel, input, questions: [question], prompt_cache_options: { mode: 'explicit' } });
|
|
27
|
+
const bytes = (value) => new TextEncoder().encode(value).byteLength;
|
|
28
|
+
if (bytes(bodyJson) > descriptor.maxRequestBytes || bytes(input) + bytes(JSON.stringify(question)) > descriptor.maxStateQuestionBytes) {
|
|
29
|
+
return { ok: false, code: 'REQUEST_INVALID' };
|
|
30
|
+
}
|
|
31
|
+
return { ok: true, request, criterion, bodyJson };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=openai-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-request.js","sourceRoot":"","sources":["../../src/decision/openai-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DecisionRequest } from './request.js';
|
|
2
|
+
import type { DecisionEvaluatorDescriptor, ResolvedDecisionCriterion } from './descriptor.js';
|
|
3
|
+
import type { DecisionValidationContext } from './validation-context.js';
|
|
4
|
+
import type { DecisionVerdict } from './verdict.js';
|
|
5
|
+
/** Trusted native semantics projection, shared by decode and host reconstruction. */
|
|
6
|
+
export declare function openAiDecisionsContext(request: DecisionRequest, criterion: ResolvedDecisionCriterion, descriptor: DecisionEvaluatorDescriptor): DecisionValidationContext;
|
|
7
|
+
/** Closed vendor codec. Typed choice values are never coerced into string IDs. */
|
|
8
|
+
export declare function decodeOpenAiDecisionsVerdict(answer: unknown, request: DecisionRequest, criterion: ResolvedDecisionCriterion, descriptor: DecisionEvaluatorDescriptor): DecisionVerdict | null;
|
|
9
|
+
//# sourceMappingURL=openai-verdict.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-verdict.d.ts","sourceRoot":"","sources":["../../src/decision/openai-verdict.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,yBAAyB,EACnG,UAAU,EAAE,2BAA2B,GAAG,yBAAyB,CAUpE;AAED,kFAAkF;AAClF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EACpF,SAAS,EAAE,yBAAyB,EAAE,UAAU,EAAE,2BAA2B,GAAG,eAAe,GAAG,IAAI,CA4CvG"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { deriveDecision, parseDecisionConfidence, parseDecisionScore } from './verdict.js';
|
|
2
|
+
import { isValidDecisionVerdict } from './client.js';
|
|
3
|
+
import { hasOnlyKeys, isRecord } from './validation.js';
|
|
4
|
+
/** Trusted native semantics projection, shared by decode and host reconstruction. */
|
|
5
|
+
export function openAiDecisionsContext(request, criterion, descriptor) {
|
|
6
|
+
return { evaluator: { ...descriptor.evaluator }, validationProfile: { profile: 'native-distribution-v1', version: 'v1' },
|
|
7
|
+
acceptedServedModelIds: [...descriptor.acceptedServedModelIds], definitionDigest: descriptor.definition.bundleDigest,
|
|
8
|
+
semantics: { nativeDecision: false, rationale: 'forbidden',
|
|
9
|
+
score: criterion.kind === 'choice' ? null : { meaning: criterion.kind === 'binary' ? 'probability-true' : 'rubric-grade',
|
|
10
|
+
min: 0, max: criterion.kind === 'binary' ? 1 : criterion.levels.length - 1 },
|
|
11
|
+
confidence: criterion.kind === 'binary' ? null : { ...descriptor.confidence } },
|
|
12
|
+
...(request.criterion.kind === 'registered' ? { registeredResolution: { criteriaId: request.criterion.criteriaId,
|
|
13
|
+
revision: request.criterion.revision, resolvedKind: criterion.kind, criterion,
|
|
14
|
+
resolvedAt: new Date().toISOString(), maxAgeMs: 1 } } : {}) };
|
|
15
|
+
}
|
|
16
|
+
/** Closed vendor codec. Typed choice values are never coerced into string IDs. */
|
|
17
|
+
export function decodeOpenAiDecisionsVerdict(answer, request, criterion, descriptor) {
|
|
18
|
+
if (!isRecord(answer) || answer.name !== 'verdict')
|
|
19
|
+
return null;
|
|
20
|
+
let score = null;
|
|
21
|
+
let label = null;
|
|
22
|
+
let confidence = null;
|
|
23
|
+
let distribution = null;
|
|
24
|
+
if (criterion.kind === 'binary') {
|
|
25
|
+
if (answer.type !== 'predicate' || !hasOnlyKeys(answer, ['type', 'name', 'probability']))
|
|
26
|
+
return null;
|
|
27
|
+
score = parseDecisionScore({ value: answer.probability, meaning: 'probability-true',
|
|
28
|
+
scale: { kind: 'bounded', min: 0, max: 1, direction: 'unordered' } });
|
|
29
|
+
if (!score)
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
if (!hasOnlyKeys(answer, ['type', 'name', 'confidence', 'probabilities', criterion.kind === 'choice' ? 'choice' : 'score'])
|
|
34
|
+
|| answer.type !== (criterion.kind === 'choice' ? 'choice' : 'score') || !Array.isArray(answer.probabilities))
|
|
35
|
+
return null;
|
|
36
|
+
const entries = [];
|
|
37
|
+
for (const entry of answer.probabilities) {
|
|
38
|
+
if (!isRecord(entry) || !hasOnlyKeys(entry, criterion.kind === 'choice' ? ['value', 'probability'] : ['value', 'label', 'probability']))
|
|
39
|
+
return null;
|
|
40
|
+
if (criterion.kind === 'choice') {
|
|
41
|
+
if (typeof entry.value !== 'string' || !criterion.options.some((option) => option.id === entry.value))
|
|
42
|
+
return null;
|
|
43
|
+
entries.push({ outcome: entry.value, nativeOutcome: entry.value, probability: entry.probability });
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
if (typeof entry.value !== 'number' || !Number.isSafeInteger(entry.value)
|
|
47
|
+
|| entry.value < 0 || entry.value >= criterion.levels.length || entry.label !== criterion.levels[entry.value].label)
|
|
48
|
+
return null;
|
|
49
|
+
entries.push({ outcome: criterion.levels[entry.value].label, nativeOutcome: String(entry.value), probability: entry.probability });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
distribution = entries;
|
|
53
|
+
confidence = parseDecisionConfidence({ value: answer.confidence, ...descriptor.confidence, origin: 'provider' });
|
|
54
|
+
if (!confidence)
|
|
55
|
+
return null;
|
|
56
|
+
if (criterion.kind === 'choice') {
|
|
57
|
+
if (typeof answer.choice !== 'string')
|
|
58
|
+
return null;
|
|
59
|
+
label = { value: answer.choice, origin: 'provider' };
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
score = parseDecisionScore({ value: answer.score, meaning: 'rubric-grade',
|
|
63
|
+
scale: { kind: 'bounded', min: 0, max: criterion.levels.length - 1, direction: criterion.direction } });
|
|
64
|
+
if (!score)
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const derived = deriveDecision({ rule: request.decision, score, label: label?.value ?? null, providerDecision: null,
|
|
69
|
+
declaredLabels: criterion.kind === 'choice' ? criterion.options.map((option) => option.id) : [] });
|
|
70
|
+
if (!derived.ok)
|
|
71
|
+
return null;
|
|
72
|
+
const verdict = { criterionKind: request.criterion.kind, resolvedCriterionKind: criterion.kind,
|
|
73
|
+
score, decision: derived.decision, label, confidence, distribution, rationale: null };
|
|
74
|
+
return isValidDecisionVerdict(verdict, request, openAiDecisionsContext(request, criterion, descriptor)) ? verdict : null;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=openai-verdict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-verdict.js","sourceRoot":"","sources":["../../src/decision/openai-verdict.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAExD,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CAAC,OAAwB,EAAE,SAAoC,EACnG,UAAuC;IACvC,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE;QACtH,sBAAsB,EAAE,CAAC,GAAG,UAAU,CAAC,sBAAsB,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,UAAU,CAAC,YAAY;QACpH,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW;YACxD,KAAK,EAAE,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc;gBACtH,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9E,UAAU,EAAE,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,UAAU,EAAE,EAAE;QACjF,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,UAAU;gBAC9G,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS;gBAC7E,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,4BAA4B,CAAC,MAAe,EAAE,OAAwB,EACpF,SAAoC,EAAE,UAAuC;IAC7E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,KAAK,GAA6B,IAAI,CAAC;IAC3C,IAAI,KAAK,GAA6B,IAAI,CAAC;IAC3C,IAAI,UAAU,GAAkC,IAAI,CAAC;IACrD,IAAI,YAAY,GAAoC,IAAI,CAAC;IACzD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACtG,KAAK,GAAG,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,kBAAkB;YACjF,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;eACtH,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7H,MAAM,OAAO,GAA2D,EAAE,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACrJ,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACnH,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAqB,EAAE,CAAC,CAAC;YAC/G,CAAC;iBAAM,CAAC;gBACN,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;uBACpE,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBACnI,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAqB,EAAE,CAAC,CAAC;YAC/I,CAAC;QACH,CAAC;QACD,YAAY,GAAG,OAAO,CAAC;QACvB,UAAU,GAAG,uBAAuB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACnD,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc;gBACvE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC1G,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,gBAAgB,EAAE,IAAI;QACjH,cAAc,EAAE,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrG,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,OAAO,GAAoB,EAAE,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,qBAAqB,EAAE,SAAS,CAAC,IAAI;QAC7G,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACxF,OAAO,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3H,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DecisionRequest } from './request.js';
|
|
2
|
+
import type { DecisionEvaluatorDescriptor } from './descriptor.js';
|
|
3
|
+
import type { DecisionErrorCode } from './errors.js';
|
|
4
|
+
export interface DecisionHostPolicy {
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
maxCostMicroUsd?: string;
|
|
7
|
+
allowRaw?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Capability/decision refusal precedes credential acquisition and financial admission. */
|
|
10
|
+
export declare function validateDecisionPolicy(request: DecisionRequest, descriptor: DecisionEvaluatorDescriptor, host?: DecisionHostPolicy): DecisionErrorCode | null;
|
|
11
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/decision/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,MAAM,WAAW,kBAAkB;IAAG,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE;AACxG,2FAA2F;AAC3F,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,2BAA2B,EACtG,IAAI,GAAE,kBAAuB,GAAG,iBAAiB,GAAG,IAAI,CAqBzD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { encodeJevRequest } from './jev-codec.js';
|
|
2
|
+
import { encodeOpenAiDecisionsRequest } from './openai-request.js';
|
|
3
|
+
/** Capability/decision refusal precedes credential acquisition and financial admission. */
|
|
4
|
+
export function validateDecisionPolicy(request, descriptor, host = {}) {
|
|
5
|
+
const encoded = descriptor.protocol === 'openai-decisions' ? encodeOpenAiDecisionsRequest(request, descriptor) : encodeJevRequest(request, descriptor);
|
|
6
|
+
if (!encoded.ok)
|
|
7
|
+
return encoded.code;
|
|
8
|
+
const criterion = encoded.criterion;
|
|
9
|
+
if (descriptor.qualification.servedIdentity !== 'qualified')
|
|
10
|
+
return 'PROVIDER_UNAVAILABLE';
|
|
11
|
+
if (request.policy?.explanation === 'required' || request.decision?.kind === 'provider')
|
|
12
|
+
return 'CAPABILITY_UNSUPPORTED';
|
|
13
|
+
if (request.raw?.mode === 'allowlisted' && host.allowRaw !== true)
|
|
14
|
+
return 'CAPABILITY_UNSUPPORTED';
|
|
15
|
+
if (criterion.kind === 'choice' && criterion.options.some((option) => ['__proto__', 'constructor', 'prototype'].includes(option.id))) {
|
|
16
|
+
return 'CAPABILITY_UNSUPPORTED';
|
|
17
|
+
}
|
|
18
|
+
const rule = request.decision;
|
|
19
|
+
if (rule?.kind === 'threshold') {
|
|
20
|
+
if (criterion.kind === 'choice')
|
|
21
|
+
return 'CAPABILITY_UNSUPPORTED';
|
|
22
|
+
const max = criterion.kind === 'binary' ? 1 : criterion.levels.length - 1;
|
|
23
|
+
if (rule.value < 0 || rule.value > max)
|
|
24
|
+
return 'REQUEST_INVALID';
|
|
25
|
+
}
|
|
26
|
+
if (rule?.kind === 'labels') {
|
|
27
|
+
if (criterion.kind !== 'choice')
|
|
28
|
+
return 'CAPABILITY_UNSUPPORTED';
|
|
29
|
+
if (!rule.passing.every((label) => criterion.options.some((option) => option.id === label)))
|
|
30
|
+
return 'REQUEST_INVALID';
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/decision/policy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAGnE,2FAA2F;AAC3F,MAAM,UAAU,sBAAsB,CAAC,OAAwB,EAAE,UAAuC,EACtG,OAA2B,EAAE;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,KAAK,kBAAkB,CAAC,CAAC,CAAC,4BAA4B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACvJ,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACpC,IAAI,UAAU,CAAC,aAAa,CAAC,cAAc,KAAK,WAAW;QAAE,OAAO,sBAAsB,CAAC;IAC3F,IAAI,OAAO,CAAC,MAAM,EAAE,WAAW,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,UAAU;QAAE,OAAO,wBAAwB,CAAC;IACzH,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,wBAAwB,CAAC;IACnG,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrI,OAAO,wBAAwB,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC9B,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,wBAAwB,CAAC;QACjE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG;YAAE,OAAO,iBAAiB,CAAC;IACnE,CAAC;IACD,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,wBAAwB,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,iBAAiB,CAAC;IACxH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { DecisionRequest, MicroUsd } from './request.js';
|
|
2
|
+
import type { DecisionBackendProtocol, DecisionEvaluatorDescriptor } from './descriptor.js';
|
|
3
|
+
import type { DecisionCost, DecisionUsage } from './receipt.js';
|
|
4
|
+
/** Projection of the host's existing immutable provider/model price row. The
|
|
5
|
+
* optional authority/protocol cells bind a row to one price authority and
|
|
6
|
+
* backend protocol; present cells must match the descriptor (§3.2
|
|
7
|
+
* Accounting), so two authorities cannot share a revision silently. */
|
|
8
|
+
export interface DecisionPrice {
|
|
9
|
+
providerId: string;
|
|
10
|
+
modelId: string;
|
|
11
|
+
priceRevision: string;
|
|
12
|
+
inputMicroUsdPerMtok: MicroUsd;
|
|
13
|
+
outputMicroUsdPerMtok: MicroUsd;
|
|
14
|
+
minimumMicroUsd: MicroUsd;
|
|
15
|
+
identityMismatchPricing: 'requested-model' | 'requires-reconciliation';
|
|
16
|
+
authority: string;
|
|
17
|
+
protocol: DecisionBackendProtocol;
|
|
18
|
+
}
|
|
19
|
+
export interface DecisionQuote {
|
|
20
|
+
price: DecisionPrice;
|
|
21
|
+
reservedMicroUsd: MicroUsd;
|
|
22
|
+
}
|
|
23
|
+
export declare const isMicroUsd: (value: unknown) => value is string;
|
|
24
|
+
export declare function quoteDecision(request: DecisionRequest, descriptor: DecisionEvaluatorDescriptor, candidate: unknown, hostCap?: MicroUsd): {
|
|
25
|
+
ok: true;
|
|
26
|
+
quote: DecisionQuote;
|
|
27
|
+
} | {
|
|
28
|
+
ok: false;
|
|
29
|
+
code: 'PRICING_UNAVAILABLE' | 'BUDGET_BOUND_UNAVAILABLE' | 'BUDGET_EXHAUSTED';
|
|
30
|
+
};
|
|
31
|
+
/** Uncertain execution uses the reserve, never invented tokens or a zero charge.
|
|
32
|
+
* Any priced component whose usage is unknown keeps the settlement pending
|
|
33
|
+
* and charges at least the full reserve: known input spend never releases
|
|
34
|
+
* the unknown output liability. */
|
|
35
|
+
export declare function priceDecisionUsage(usage: DecisionUsage, quote: DecisionQuote, identityMismatch?: boolean): {
|
|
36
|
+
cost: DecisionCost;
|
|
37
|
+
pending: boolean;
|
|
38
|
+
overrun: boolean;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/decision/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIhE;;;uEAGuE;AACvE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAC3D,oBAAoB,EAAE,QAAQ,CAAC;IAAC,qBAAqB,EAAE,QAAQ,CAAC;IAAC,eAAe,EAAE,QAAQ,CAAC;IAC3F,uBAAuB,EAAE,iBAAiB,GAAG,yBAAyB,CAAC;IACvE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,uBAAuB,CAAC;CACtD;AACD,MAAM,WAAW,aAAa;IAAG,KAAK,EAAE,aAAa,CAAC;IAAC,gBAAgB,EAAE,QAAQ,CAAA;CAAE;AACnF,eAAO,MAAM,UAAU,UAAW,OAAO,oBAAoF,CAAC;AAI9H,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,2BAA2B,EAAE,SAAS,EAAE,OAAO,EACjH,OAAO,CAAC,EAAE,QAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,qBAAqB,GAAG,0BAA0B,GAAG,kBAAkB,CAAA;CAAE,CA6BvJ;AAED;;;mCAGmC;AACnC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,UAAQ,GACrG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAmB3D"}
|