@xemahq/llm-client-nest 0.1.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/LICENSE +176 -0
- package/README.md +105 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/dialect.d.ts +15 -0
- package/dist/lib/dialect.d.ts.map +1 -0
- package/dist/lib/dialect.js +63 -0
- package/dist/lib/dialect.js.map +1 -0
- package/dist/lib/errors.d.ts +23 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +47 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/gateway-session-minter.d.ts +20 -0
- package/dist/lib/gateway-session-minter.d.ts.map +1 -0
- package/dist/lib/gateway-session-minter.js +112 -0
- package/dist/lib/gateway-session-minter.js.map +1 -0
- package/dist/lib/gen-ai.d.ts +45 -0
- package/dist/lib/gen-ai.d.ts.map +1 -0
- package/dist/lib/gen-ai.js +126 -0
- package/dist/lib/gen-ai.js.map +1 -0
- package/dist/lib/json-readers.d.ts +6 -0
- package/dist/lib/json-readers.d.ts.map +1 -0
- package/dist/lib/json-readers.js +32 -0
- package/dist/lib/json-readers.js.map +1 -0
- package/dist/lib/llm-client.d.ts +46 -0
- package/dist/lib/llm-client.d.ts.map +1 -0
- package/dist/lib/llm-client.js +341 -0
- package/dist/lib/llm-client.js.map +1 -0
- package/dist/lib/provider-address.d.ts +3 -0
- package/dist/lib/provider-address.d.ts.map +1 -0
- package/dist/lib/provider-address.js +18 -0
- package/dist/lib/provider-address.js.map +1 -0
- package/dist/lib/session-cache.d.ts +21 -0
- package/dist/lib/session-cache.d.ts.map +1 -0
- package/dist/lib/session-cache.js +65 -0
- package/dist/lib/session-cache.js.map +1 -0
- package/dist/lib/stream.d.ts +18 -0
- package/dist/lib/stream.d.ts.map +1 -0
- package/dist/lib/stream.js +185 -0
- package/dist/lib/stream.js.map +1 -0
- package/dist/lib/structured.d.ts +22 -0
- package/dist/lib/structured.d.ts.map +1 -0
- package/dist/lib/structured.js +62 -0
- package/dist/lib/structured.js.map +1 -0
- package/dist/lib/wire.d.ts +45 -0
- package/dist/lib/wire.d.ts.map +1 -0
- package/dist/lib/wire.js +7 -0
- package/dist/lib/wire.js.map +1 -0
- package/dist/nest/llm-client.module.d.ts +15 -0
- package/dist/nest/llm-client.module.d.ts.map +1 -0
- package/dist/nest/llm-client.module.js +61 -0
- package/dist/nest/llm-client.module.js.map +1 -0
- package/dist/nest/typed-client-mint-transport.d.ts +15 -0
- package/dist/nest/typed-client-mint-transport.d.ts.map +1 -0
- package/dist/nest/typed-client-mint-transport.js +32 -0
- package/dist/nest/typed-client-mint-transport.js.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GatewaySessionMinter = void 0;
|
|
4
|
+
exports.buildMintBody = buildMintBody;
|
|
5
|
+
const platform_common_1 = require("@xemahq/platform-common");
|
|
6
|
+
const errors_1 = require("./errors");
|
|
7
|
+
const provider_address_1 = require("./provider-address");
|
|
8
|
+
const session_cache_1 = require("./session-cache");
|
|
9
|
+
const wire_1 = require("./wire");
|
|
10
|
+
function unwrapGrant(body) {
|
|
11
|
+
const data = typeof body === 'object' && body !== null
|
|
12
|
+
? body.data
|
|
13
|
+
: undefined;
|
|
14
|
+
if (typeof data !== 'object' || data === null) {
|
|
15
|
+
throw new errors_1.LlmClientError(errors_1.LlmClientFailure.GatewayGrantMalformed, `llm-registry-api POST ${wire_1.GATEWAY_TOKEN_MINT_PATH} returned no response ` +
|
|
16
|
+
'envelope; the peer is missing its response interceptor.');
|
|
17
|
+
}
|
|
18
|
+
const grant = data;
|
|
19
|
+
const missing = [
|
|
20
|
+
['token', typeof grant.token === 'string' && grant.token !== ''],
|
|
21
|
+
['gatewayUrl', typeof grant.gatewayUrl === 'string' && grant.gatewayUrl !== ''],
|
|
22
|
+
[
|
|
23
|
+
'nativeProxyUrl',
|
|
24
|
+
typeof grant.nativeProxyUrl === 'string' && grant.nativeProxyUrl !== '',
|
|
25
|
+
],
|
|
26
|
+
['expiresIn', typeof grant.expiresIn === 'number' && grant.expiresIn > 0],
|
|
27
|
+
]
|
|
28
|
+
.filter(([, ok]) => !ok)
|
|
29
|
+
.map(([field]) => field);
|
|
30
|
+
if (missing.length > 0) {
|
|
31
|
+
throw new errors_1.LlmClientError(errors_1.LlmClientFailure.GatewayGrantMalformed, `llm-registry-api POST ${wire_1.GATEWAY_TOKEN_MINT_PATH} returned a grant ` +
|
|
32
|
+
`missing or empty: ${missing.join(', ')}.`);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
token: grant.token,
|
|
36
|
+
expiresIn: grant.expiresIn,
|
|
37
|
+
gatewayUrl: grant.gatewayUrl.replace(/\/+$/, ''),
|
|
38
|
+
nativeProxyUrl: grant.nativeProxyUrl.replace(/\/+$/, ''),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
class GatewaySessionMinter {
|
|
42
|
+
transport;
|
|
43
|
+
cache;
|
|
44
|
+
constructor(transport, cache = new session_cache_1.GrantCache()) {
|
|
45
|
+
this.transport = transport;
|
|
46
|
+
this.cache = cache;
|
|
47
|
+
}
|
|
48
|
+
acquire(model, input) {
|
|
49
|
+
const providerId = (0, provider_address_1.resolveBrokerProviderId)(model);
|
|
50
|
+
const key = (0, session_cache_1.grantCacheKey)({
|
|
51
|
+
orgId: input.orgId,
|
|
52
|
+
projectId: input.projectId,
|
|
53
|
+
providerId,
|
|
54
|
+
modelId: model.modelId,
|
|
55
|
+
});
|
|
56
|
+
return this.cache.getOrLoad(key, () => this.mint(providerId, model, input));
|
|
57
|
+
}
|
|
58
|
+
mintUncached(model, input) {
|
|
59
|
+
return this.mint((0, provider_address_1.resolveBrokerProviderId)(model), model, input);
|
|
60
|
+
}
|
|
61
|
+
invalidate(model, input) {
|
|
62
|
+
this.cache.invalidate((0, session_cache_1.grantCacheKey)({
|
|
63
|
+
orgId: input.orgId,
|
|
64
|
+
projectId: input.projectId,
|
|
65
|
+
providerId: (0, provider_address_1.resolveBrokerProviderId)(model),
|
|
66
|
+
modelId: model.modelId,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
async mint(providerId, model, input) {
|
|
70
|
+
const body = buildMintBody(providerId, model, input);
|
|
71
|
+
let raw;
|
|
72
|
+
try {
|
|
73
|
+
raw = await this.transport.post(wire_1.GATEWAY_TOKEN_MINT_PATH, body, {
|
|
74
|
+
orgId: input.orgId,
|
|
75
|
+
projectId: input.projectId,
|
|
76
|
+
headers: {
|
|
77
|
+
[wire_1.ORG_HEADER]: input.orgId,
|
|
78
|
+
...(input.projectId === undefined
|
|
79
|
+
? {}
|
|
80
|
+
: { [wire_1.PROJECT_HEADER]: input.projectId }),
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (cause) {
|
|
85
|
+
throw new errors_1.LlmClientError(errors_1.LlmClientFailure.GatewayMintFailed, `Gateway grant mint failed for model "${model.modelId}" on provider ` +
|
|
86
|
+
`"${providerId}": ${cause instanceof Error ? cause.message : String(cause)}`, { cause, ...readStatus(cause) });
|
|
87
|
+
}
|
|
88
|
+
return unwrapGrant(raw);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.GatewaySessionMinter = GatewaySessionMinter;
|
|
92
|
+
function readStatus(err) {
|
|
93
|
+
const status = typeof err === 'object' && err !== null
|
|
94
|
+
? err.status
|
|
95
|
+
: undefined;
|
|
96
|
+
return typeof status === 'number' ? { status } : {};
|
|
97
|
+
}
|
|
98
|
+
function buildMintBody(providerId, model, input) {
|
|
99
|
+
return {
|
|
100
|
+
userId: input.userId,
|
|
101
|
+
providerId,
|
|
102
|
+
modelId: model.modelId,
|
|
103
|
+
providerTier: (0, platform_common_1.resolveProviderTier)(model.providerIsSystem),
|
|
104
|
+
groupLabel: input.groupLabel,
|
|
105
|
+
groupCategory: input.groupCategory,
|
|
106
|
+
caller: input.caller,
|
|
107
|
+
...(input.metadata === undefined ? {} : { metadata: { ...input.metadata } }),
|
|
108
|
+
...(input.plugins === undefined ? {} : { plugins: [...input.plugins] }),
|
|
109
|
+
...(input.skipAudit === undefined ? {} : { skipAudit: input.skipAudit }),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=gateway-session-minter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-session-minter.js","sourceRoot":"","sources":["../../src/lib/gateway-session-minter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type Histogram } from '@xemahq/observability-nest';
|
|
2
|
+
export declare const ATTR_GEN_AI_OPERATION_NAME = "gen_ai.operation.name";
|
|
3
|
+
export declare const ATTR_GEN_AI_PROVIDER_NAME = "gen_ai.provider.name";
|
|
4
|
+
export declare const ATTR_GEN_AI_REQUEST_MODEL = "gen_ai.request.model";
|
|
5
|
+
export declare const ATTR_GEN_AI_REQUEST_MAX_TOKENS = "gen_ai.request.max_tokens";
|
|
6
|
+
export declare const ATTR_GEN_AI_REQUEST_TEMPERATURE = "gen_ai.request.temperature";
|
|
7
|
+
export declare const ATTR_GEN_AI_REQUEST_STREAM = "gen_ai.request.stream";
|
|
8
|
+
export declare const ATTR_GEN_AI_RESPONSE_MODEL = "gen_ai.response.model";
|
|
9
|
+
export declare const ATTR_GEN_AI_RESPONSE_ID = "gen_ai.response.id";
|
|
10
|
+
export declare const ATTR_GEN_AI_RESPONSE_FINISH_REASONS = "gen_ai.response.finish_reasons";
|
|
11
|
+
export declare const ATTR_GEN_AI_USAGE_INPUT_TOKENS = "gen_ai.usage.input_tokens";
|
|
12
|
+
export declare const ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = "gen_ai.usage.output_tokens";
|
|
13
|
+
export declare const ATTR_GEN_AI_EMBEDDINGS_DIMENSION_COUNT = "gen_ai.embeddings.dimension.count";
|
|
14
|
+
export declare const ATTR_GEN_AI_TOKEN_TYPE = "gen_ai.token.type";
|
|
15
|
+
export declare const ATTR_ERROR_TYPE = "error.type";
|
|
16
|
+
export declare enum GenAiOperation {
|
|
17
|
+
Chat = "chat",
|
|
18
|
+
Embeddings = "embeddings"
|
|
19
|
+
}
|
|
20
|
+
export declare enum GenAiTokenType {
|
|
21
|
+
Input = "input",
|
|
22
|
+
Output = "output"
|
|
23
|
+
}
|
|
24
|
+
export declare const METRIC_GEN_AI_CLIENT_TOKEN_USAGE = "gen_ai.client.token.usage";
|
|
25
|
+
export declare const METRIC_GEN_AI_CLIENT_OPERATION_DURATION = "gen_ai.client.operation.duration";
|
|
26
|
+
export declare function genAiProviderName(apiType: string | undefined, providerSlug: string | undefined): string;
|
|
27
|
+
export declare function genAiSpanName(operation: GenAiOperation, model: string): string;
|
|
28
|
+
export interface GenAiInstruments {
|
|
29
|
+
readonly tokenUsage: Histogram;
|
|
30
|
+
readonly operationDuration: Histogram;
|
|
31
|
+
}
|
|
32
|
+
export declare function genAiInstruments(): GenAiInstruments;
|
|
33
|
+
export declare function resetGenAiInstrumentsForTest(): void;
|
|
34
|
+
export declare function errorTypeOf(err: unknown): string;
|
|
35
|
+
export declare function recordGenAiMetrics(input: {
|
|
36
|
+
readonly operation: GenAiOperation;
|
|
37
|
+
readonly providerName: string;
|
|
38
|
+
readonly requestModel: string;
|
|
39
|
+
readonly responseModel?: string | undefined;
|
|
40
|
+
readonly inputTokens?: number | undefined;
|
|
41
|
+
readonly outputTokens?: number | undefined;
|
|
42
|
+
readonly durationMs: number;
|
|
43
|
+
readonly errorType?: string | undefined;
|
|
44
|
+
}): void;
|
|
45
|
+
//# sourceMappingURL=gen-ai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen-ai.d.ts","sourceRoot":"","sources":["../../src/lib/gen-ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AA4BvF,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAChE,eAAO,MAAM,yBAAyB,yBAAyB,CAAC;AAChE,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,eAAO,MAAM,+BAA+B,+BAA+B,CAAC;AAC5E,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAClE,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAClE,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAC5D,eAAO,MAAM,mCAAmC,mCAAmC,CAAC;AACpF,eAAO,MAAM,8BAA8B,8BAA8B,CAAC;AAC1E,eAAO,MAAM,+BAA+B,+BAA+B,CAAC;AAC5E,eAAO,MAAM,sCAAsC,sCAAsC,CAAC;AAE1F,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,eAAO,MAAM,eAAe,eAAe,CAAC;AAG5C,oBAAY,cAAc;IACxB,IAAI,SAAS;IACb,UAAU,eAAe;CAC1B;AAGD,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAGD,eAAO,MAAM,gCAAgC,8BAA8B,CAAC;AAE5E,eAAO,MAAM,uCAAuC,qCAAqC,CAAC;AAsC1F,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,CAcR;AAOD,wBAAgB,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9E;AAGD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,SAAS,CAAC;CACvC;AAYD,wBAAgB,gBAAgB,IAAI,gBAAgB,CAYnD;AAGD,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAUD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAgBhD;AAUD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC,GAAG,IAAI,CA0BP"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION = exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE = exports.GenAiTokenType = exports.GenAiOperation = exports.ATTR_ERROR_TYPE = exports.ATTR_GEN_AI_TOKEN_TYPE = exports.ATTR_GEN_AI_EMBEDDINGS_DIMENSION_COUNT = exports.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = exports.ATTR_GEN_AI_USAGE_INPUT_TOKENS = exports.ATTR_GEN_AI_RESPONSE_FINISH_REASONS = exports.ATTR_GEN_AI_RESPONSE_ID = exports.ATTR_GEN_AI_RESPONSE_MODEL = exports.ATTR_GEN_AI_REQUEST_STREAM = exports.ATTR_GEN_AI_REQUEST_TEMPERATURE = exports.ATTR_GEN_AI_REQUEST_MAX_TOKENS = exports.ATTR_GEN_AI_REQUEST_MODEL = exports.ATTR_GEN_AI_PROVIDER_NAME = exports.ATTR_GEN_AI_OPERATION_NAME = void 0;
|
|
4
|
+
exports.genAiProviderName = genAiProviderName;
|
|
5
|
+
exports.genAiSpanName = genAiSpanName;
|
|
6
|
+
exports.genAiInstruments = genAiInstruments;
|
|
7
|
+
exports.resetGenAiInstrumentsForTest = resetGenAiInstrumentsForTest;
|
|
8
|
+
exports.errorTypeOf = errorTypeOf;
|
|
9
|
+
exports.recordGenAiMetrics = recordGenAiMetrics;
|
|
10
|
+
const observability_nest_1 = require("@xemahq/observability-nest");
|
|
11
|
+
exports.ATTR_GEN_AI_OPERATION_NAME = 'gen_ai.operation.name';
|
|
12
|
+
exports.ATTR_GEN_AI_PROVIDER_NAME = 'gen_ai.provider.name';
|
|
13
|
+
exports.ATTR_GEN_AI_REQUEST_MODEL = 'gen_ai.request.model';
|
|
14
|
+
exports.ATTR_GEN_AI_REQUEST_MAX_TOKENS = 'gen_ai.request.max_tokens';
|
|
15
|
+
exports.ATTR_GEN_AI_REQUEST_TEMPERATURE = 'gen_ai.request.temperature';
|
|
16
|
+
exports.ATTR_GEN_AI_REQUEST_STREAM = 'gen_ai.request.stream';
|
|
17
|
+
exports.ATTR_GEN_AI_RESPONSE_MODEL = 'gen_ai.response.model';
|
|
18
|
+
exports.ATTR_GEN_AI_RESPONSE_ID = 'gen_ai.response.id';
|
|
19
|
+
exports.ATTR_GEN_AI_RESPONSE_FINISH_REASONS = 'gen_ai.response.finish_reasons';
|
|
20
|
+
exports.ATTR_GEN_AI_USAGE_INPUT_TOKENS = 'gen_ai.usage.input_tokens';
|
|
21
|
+
exports.ATTR_GEN_AI_USAGE_OUTPUT_TOKENS = 'gen_ai.usage.output_tokens';
|
|
22
|
+
exports.ATTR_GEN_AI_EMBEDDINGS_DIMENSION_COUNT = 'gen_ai.embeddings.dimension.count';
|
|
23
|
+
exports.ATTR_GEN_AI_TOKEN_TYPE = 'gen_ai.token.type';
|
|
24
|
+
exports.ATTR_ERROR_TYPE = 'error.type';
|
|
25
|
+
var GenAiOperation;
|
|
26
|
+
(function (GenAiOperation) {
|
|
27
|
+
GenAiOperation["Chat"] = "chat";
|
|
28
|
+
GenAiOperation["Embeddings"] = "embeddings";
|
|
29
|
+
})(GenAiOperation || (exports.GenAiOperation = GenAiOperation = {}));
|
|
30
|
+
var GenAiTokenType;
|
|
31
|
+
(function (GenAiTokenType) {
|
|
32
|
+
GenAiTokenType["Input"] = "input";
|
|
33
|
+
GenAiTokenType["Output"] = "output";
|
|
34
|
+
})(GenAiTokenType || (exports.GenAiTokenType = GenAiTokenType = {}));
|
|
35
|
+
exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE = 'gen_ai.client.token.usage';
|
|
36
|
+
exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION = 'gen_ai.client.operation.duration';
|
|
37
|
+
const WELL_KNOWN_PROVIDERS = new Map([
|
|
38
|
+
['anthropic', 'anthropic'],
|
|
39
|
+
['openai', 'openai'],
|
|
40
|
+
['openai-compatible', 'openai'],
|
|
41
|
+
['azure-openai', 'azure.ai.openai'],
|
|
42
|
+
['bedrock', 'aws.bedrock'],
|
|
43
|
+
['aws-bedrock', 'aws.bedrock'],
|
|
44
|
+
['google', 'gcp.gen_ai'],
|
|
45
|
+
['gemini', 'gcp.gemini'],
|
|
46
|
+
['vertex-ai', 'gcp.vertex_ai'],
|
|
47
|
+
['cohere', 'cohere'],
|
|
48
|
+
['deepseek', 'deepseek'],
|
|
49
|
+
['groq', 'groq'],
|
|
50
|
+
['mistral', 'mistral_ai'],
|
|
51
|
+
['perplexity', 'perplexity'],
|
|
52
|
+
['xai', 'x_ai'],
|
|
53
|
+
]);
|
|
54
|
+
function genAiProviderName(apiType, providerSlug) {
|
|
55
|
+
for (const candidate of [apiType, providerSlug]) {
|
|
56
|
+
const normalized = candidate?.trim().toLowerCase();
|
|
57
|
+
if (normalized === undefined || normalized === '') {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const wellKnown = WELL_KNOWN_PROVIDERS.get(normalized);
|
|
61
|
+
if (wellKnown !== undefined) {
|
|
62
|
+
return wellKnown;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return providerSlug?.trim() ?? apiType?.trim() ?? 'unknown';
|
|
66
|
+
}
|
|
67
|
+
function genAiSpanName(operation, model) {
|
|
68
|
+
return `${operation} ${model}`;
|
|
69
|
+
}
|
|
70
|
+
let instruments;
|
|
71
|
+
function genAiInstruments() {
|
|
72
|
+
instruments ??= {
|
|
73
|
+
tokenUsage: (0, observability_nest_1.getMeter)().createHistogram(exports.METRIC_GEN_AI_CLIENT_TOKEN_USAGE, {
|
|
74
|
+
description: 'Number of input and output tokens used.',
|
|
75
|
+
unit: '{token}',
|
|
76
|
+
}),
|
|
77
|
+
operationDuration: (0, observability_nest_1.getMeter)().createHistogram(exports.METRIC_GEN_AI_CLIENT_OPERATION_DURATION, { description: 'GenAI operation duration.', unit: 's' }),
|
|
78
|
+
};
|
|
79
|
+
return instruments;
|
|
80
|
+
}
|
|
81
|
+
function resetGenAiInstrumentsForTest() {
|
|
82
|
+
instruments = undefined;
|
|
83
|
+
}
|
|
84
|
+
function errorTypeOf(err) {
|
|
85
|
+
const status = typeof err === 'object' && err !== null
|
|
86
|
+
? err.status
|
|
87
|
+
: undefined;
|
|
88
|
+
if (typeof status === 'number') {
|
|
89
|
+
return String(status);
|
|
90
|
+
}
|
|
91
|
+
const reason = typeof err === 'object' && err !== null
|
|
92
|
+
? err.reason
|
|
93
|
+
: undefined;
|
|
94
|
+
if (typeof reason === 'string') {
|
|
95
|
+
return reason;
|
|
96
|
+
}
|
|
97
|
+
return err instanceof Error ? err.name : 'unknown';
|
|
98
|
+
}
|
|
99
|
+
function recordGenAiMetrics(input) {
|
|
100
|
+
const { tokenUsage, operationDuration } = genAiInstruments();
|
|
101
|
+
const base = {
|
|
102
|
+
[exports.ATTR_GEN_AI_OPERATION_NAME]: input.operation,
|
|
103
|
+
[exports.ATTR_GEN_AI_PROVIDER_NAME]: input.providerName,
|
|
104
|
+
[exports.ATTR_GEN_AI_REQUEST_MODEL]: input.requestModel,
|
|
105
|
+
...(input.responseModel === undefined
|
|
106
|
+
? {}
|
|
107
|
+
: { [exports.ATTR_GEN_AI_RESPONSE_MODEL]: input.responseModel }),
|
|
108
|
+
...(input.errorType === undefined
|
|
109
|
+
? {}
|
|
110
|
+
: { [exports.ATTR_ERROR_TYPE]: input.errorType }),
|
|
111
|
+
};
|
|
112
|
+
operationDuration.record(input.durationMs / 1000, base);
|
|
113
|
+
if (input.inputTokens !== undefined) {
|
|
114
|
+
tokenUsage.record(input.inputTokens, {
|
|
115
|
+
...base,
|
|
116
|
+
[exports.ATTR_GEN_AI_TOKEN_TYPE]: GenAiTokenType.Input,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (input.outputTokens !== undefined) {
|
|
120
|
+
tokenUsage.record(input.outputTokens, {
|
|
121
|
+
...base,
|
|
122
|
+
[exports.ATTR_GEN_AI_TOKEN_TYPE]: GenAiTokenType.Output,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=gen-ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen-ai.js","sourceRoot":"","sources":["../../src/lib/gen-ai.ts"],"names":[],"mappings":";;;AAmGA,8CAiBC;AAOD,sCAEC;AAkBD,4CAYC;AAGD,oEAEC;AAUD,kCAgBC;AAUD,gDAmCC;AAvOD,mEAAuF;AA4B1E,QAAA,0BAA0B,GAAG,uBAAuB,CAAC;AAErD,QAAA,yBAAyB,GAAG,sBAAsB,CAAC;AACnD,QAAA,yBAAyB,GAAG,sBAAsB,CAAC;AACnD,QAAA,8BAA8B,GAAG,2BAA2B,CAAC;AAC7D,QAAA,+BAA+B,GAAG,4BAA4B,CAAC;AAC/D,QAAA,0BAA0B,GAAG,uBAAuB,CAAC;AACrD,QAAA,0BAA0B,GAAG,uBAAuB,CAAC;AACrD,QAAA,uBAAuB,GAAG,oBAAoB,CAAC;AAC/C,QAAA,mCAAmC,GAAG,gCAAgC,CAAC;AACvE,QAAA,8BAA8B,GAAG,2BAA2B,CAAC;AAC7D,QAAA,+BAA+B,GAAG,4BAA4B,CAAC;AAC/D,QAAA,sCAAsC,GAAG,mCAAmC,CAAC;AAE7E,QAAA,sBAAsB,GAAG,mBAAmB,CAAC;AAE7C,QAAA,eAAe,GAAG,YAAY,CAAC;AAG5C,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,+BAAa,CAAA;IACb,2CAAyB,CAAA;AAC3B,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAGD,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAGY,QAAA,gCAAgC,GAAG,2BAA2B,CAAC;AAE/D,QAAA,uCAAuC,GAAG,kCAAkC,CAAC;AAa1F,MAAM,oBAAoB,GAAgC,IAAI,GAAG,CAAC;IAChE,CAAC,WAAW,EAAE,WAAW,CAAC;IAC1B,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAC/B,CAAC,cAAc,EAAE,iBAAiB,CAAC;IACnC,CAAC,SAAS,EAAE,aAAa,CAAC;IAC1B,CAAC,aAAa,EAAE,aAAa,CAAC;IAC9B,CAAC,QAAQ,EAAE,YAAY,CAAC;IACxB,CAAC,QAAQ,EAAE,YAAY,CAAC;IACxB,CAAC,WAAW,EAAE,eAAe,CAAC;IAC9B,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,SAAS,EAAE,YAAY,CAAC;IACzB,CAAC,YAAY,EAAE,YAAY,CAAC;IAC5B,CAAC,KAAK,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AASH,SAAgB,iBAAiB,CAC/B,OAA2B,EAC3B,YAAgC;IAEhC,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YAClD,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAGD,OAAO,YAAY,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AAC9D,CAAC;AAOD,SAAgB,aAAa,CAAC,SAAyB,EAAE,KAAa;IACpE,OAAO,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC;AACjC,CAAC;AAQD,IAAI,WAAyC,CAAC;AAU9C,SAAgB,gBAAgB;IAC9B,WAAW,KAAK;QACd,UAAU,EAAE,IAAA,6BAAQ,GAAE,CAAC,eAAe,CAAC,wCAAgC,EAAE;YACvE,WAAW,EAAE,yCAAyC;YACtD,IAAI,EAAE,SAAS;SAChB,CAAC;QACF,iBAAiB,EAAE,IAAA,6BAAQ,GAAE,CAAC,eAAe,CAC3C,+CAAuC,EACvC,EAAE,WAAW,EAAE,2BAA2B,EAAE,IAAI,EAAE,GAAG,EAAE,CACxD;KACF,CAAC;IACF,OAAO,WAAW,CAAC;AACrB,CAAC;AAGD,SAAgB,4BAA4B;IAC1C,WAAW,GAAG,SAAS,CAAC;AAC1B,CAAC;AAUD,SAAgB,WAAW,CAAC,GAAY;IACtC,MAAM,MAAM,GACV,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QACrC,CAAC,CAAE,GAA4B,CAAC,MAAM;QACtC,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GACV,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QACrC,CAAC,CAAE,GAA4B,CAAC,MAAM;QACtC,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAUD,SAAgB,kBAAkB,CAAC,KASlC;IACC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAe;QACvB,CAAC,kCAA0B,CAAC,EAAE,KAAK,CAAC,SAAS;QAC7C,CAAC,iCAAyB,CAAC,EAAE,KAAK,CAAC,YAAY;QAC/C,CAAC,iCAAyB,CAAC,EAAE,KAAK,CAAC,YAAY;QAC/C,GAAG,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,CAAC,kCAA0B,CAAC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;QAC1D,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,CAAC,uBAAe,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;KAC5C,CAAC;IACF,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,GAAG,IAAI;YACP,CAAC,8BAAsB,CAAC,EAAE,cAAc,CAAC,KAAK;SAC/C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE;YACpC,GAAG,IAAI;YACP,CAAC,8BAAsB,CAAC,EAAE,cAAc,CAAC,MAAM;SAChD,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function asRecord(value: unknown, what: string): Record<string, unknown>;
|
|
2
|
+
export declare function asRecordOrUndefined(value: unknown): Record<string, unknown> | undefined;
|
|
3
|
+
export declare function asArray(value: unknown, what: string): unknown[];
|
|
4
|
+
export declare function numberOrUndefined(value: unknown): number | undefined;
|
|
5
|
+
export declare function stringOrUndefined(value: unknown): string | undefined;
|
|
6
|
+
//# sourceMappingURL=json-readers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-readers.d.ts","sourceRoot":"","sources":["../../src/lib/json-readers.ts"],"names":[],"mappings":"AAkBA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ9E;AAGD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAIrC;AAQD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAQ/D;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEpE;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEpE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.asRecord = asRecord;
|
|
4
|
+
exports.asRecordOrUndefined = asRecordOrUndefined;
|
|
5
|
+
exports.asArray = asArray;
|
|
6
|
+
exports.numberOrUndefined = numberOrUndefined;
|
|
7
|
+
exports.stringOrUndefined = stringOrUndefined;
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
function asRecord(value, what) {
|
|
10
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
11
|
+
throw new errors_1.LlmClientError(errors_1.LlmClientFailure.GatewayResponseMalformed, `The LLM gateway returned a ${what} that is not an object.`);
|
|
12
|
+
}
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
function asRecordOrUndefined(value) {
|
|
16
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
17
|
+
? value
|
|
18
|
+
: undefined;
|
|
19
|
+
}
|
|
20
|
+
function asArray(value, what) {
|
|
21
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
22
|
+
throw new errors_1.LlmClientError(errors_1.LlmClientFailure.GatewayResponseMalformed, `The LLM gateway returned an empty or absent \`${what}\`.`);
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function numberOrUndefined(value) {
|
|
27
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
28
|
+
}
|
|
29
|
+
function stringOrUndefined(value) {
|
|
30
|
+
return typeof value === 'string' ? value : undefined;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=json-readers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-readers.js","sourceRoot":"","sources":["../../src/lib/json-readers.ts"],"names":[],"mappings":";;AAkBA,4BAQC;AAGD,kDAMC;AAQD,0BAQC;AAGD,8CAEC;AAGD,8CAEC;AA7DD,qCAA4D;AAkB5D,SAAgB,QAAQ,CAAC,KAAc,EAAE,IAAY;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,uBAAc,CACtB,yBAAgB,CAAC,wBAAwB,EACzC,8BAA8B,IAAI,yBAAyB,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAGD,SAAgB,mBAAmB,CACjC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAQD,SAAgB,OAAO,CAAC,KAAc,EAAE,IAAY;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,uBAAc,CACtB,yBAAgB,CAAC,wBAAwB,EACzC,iDAAiD,IAAI,KAAK,CAC3D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,SAAgB,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAGD,SAAgB,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type ChatStreamEvent } from './stream';
|
|
2
|
+
import { type StructuredOutputSpec } from './structured';
|
|
3
|
+
import type { GatewaySessionMinter } from './gateway-session-minter';
|
|
4
|
+
import type { MintGatewaySessionInput, ResolvedModel } from './wire';
|
|
5
|
+
export declare const DEFAULT_CALL_TIMEOUT_MS = 120000;
|
|
6
|
+
export interface ChatMessage {
|
|
7
|
+
readonly role: 'system' | 'user' | 'assistant';
|
|
8
|
+
readonly content: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ChatRequest {
|
|
11
|
+
readonly messages: readonly ChatMessage[];
|
|
12
|
+
readonly maxTokens?: number | undefined;
|
|
13
|
+
readonly timeoutMs?: number | undefined;
|
|
14
|
+
}
|
|
15
|
+
export interface LlmUsage {
|
|
16
|
+
readonly inputTokens?: number | undefined;
|
|
17
|
+
readonly outputTokens?: number | undefined;
|
|
18
|
+
}
|
|
19
|
+
export interface ChatResult {
|
|
20
|
+
readonly content: string;
|
|
21
|
+
readonly model: string | undefined;
|
|
22
|
+
readonly responseId: string | undefined;
|
|
23
|
+
readonly finishReason: string | undefined;
|
|
24
|
+
readonly usage: LlmUsage;
|
|
25
|
+
}
|
|
26
|
+
export interface EmbedResult {
|
|
27
|
+
readonly embeddings: readonly (readonly number[])[];
|
|
28
|
+
readonly model: string | undefined;
|
|
29
|
+
readonly usage: LlmUsage;
|
|
30
|
+
}
|
|
31
|
+
export interface LlmCallContext extends MintGatewaySessionInput {
|
|
32
|
+
readonly model: ResolvedModel;
|
|
33
|
+
}
|
|
34
|
+
export declare class LlmClient {
|
|
35
|
+
private readonly minter;
|
|
36
|
+
constructor(minter: GatewaySessionMinter);
|
|
37
|
+
chat(context: LlmCallContext, request: ChatRequest): Promise<ChatResult>;
|
|
38
|
+
chatStructured<T>(context: LlmCallContext, request: ChatRequest, spec: StructuredOutputSpec<T>): Promise<T>;
|
|
39
|
+
chatStream(context: LlmCallContext, request: ChatRequest): AsyncGenerator<ChatStreamEvent, void>;
|
|
40
|
+
embed(context: LlmCallContext, input: readonly string[], options?: {
|
|
41
|
+
readonly timeoutMs?: number;
|
|
42
|
+
}): Promise<EmbedResult>;
|
|
43
|
+
private instrument;
|
|
44
|
+
private send;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=llm-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-client.d.ts","sourceRoot":"","sources":["../../src/lib/llm-client.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAgBrE,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAG/C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAwBD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAExC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAGD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAGD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAGD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAGD,MAAM,WAAW,cAAe,SAAQ,uBAAuB;IAC7D,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;CAC/B;AAiCD,qBAAa,SAAS;IACD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,oBAAoB;IAGnD,IAAI,CACf,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IAiDT,cAAc,CAAC,CAAC,EAC3B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC;IAwEC,UAAU,CACtB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,WAAW,GACnB,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC;IA8F3B,KAAK,CAChB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACxC,OAAO,CAAC,WAAW,CAAC;YAyCT,UAAU;YA+DV,IAAI;CAmCnB"}
|