@zhivex-ai/core 1.18.0 → 1.19.1
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 +4 -0
- package/dist/agent/approvals.d.ts +7 -0
- package/dist/agent/approvals.d.ts.map +1 -0
- package/dist/agent/approvals.js +97 -0
- package/dist/agent/approvals.js.map +1 -0
- package/dist/agent/cancellation.d.ts +4 -0
- package/dist/agent/cancellation.d.ts.map +1 -0
- package/dist/agent/cancellation.js +69 -0
- package/dist/agent/cancellation.js.map +1 -0
- package/dist/agent/common.d.ts +20 -0
- package/dist/agent/common.d.ts.map +1 -0
- package/dist/agent/common.js +150 -0
- package/dist/agent/common.js.map +1 -0
- package/dist/agent/compaction.d.ts +6 -0
- package/dist/agent/compaction.d.ts.map +1 -0
- package/dist/agent/compaction.js +156 -0
- package/dist/agent/compaction.js.map +1 -0
- package/dist/agent/context.d.ts +58 -0
- package/dist/agent/context.d.ts.map +1 -0
- package/dist/agent/context.js +267 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/definition.d.ts +4 -0
- package/dist/agent/definition.d.ts.map +1 -0
- package/dist/agent/definition.js +35 -0
- package/dist/agent/definition.js.map +1 -0
- package/dist/agent/execution.d.ts +14 -0
- package/dist/agent/execution.d.ts.map +1 -0
- package/dist/agent/execution.js +1062 -0
- package/dist/agent/execution.js.map +1 -0
- package/dist/agent/groups.d.ts +3 -0
- package/dist/agent/groups.d.ts.map +1 -0
- package/dist/agent/groups.js +130 -0
- package/dist/agent/groups.js.map +1 -0
- package/dist/agent/guardrails.d.ts +4 -0
- package/dist/agent/guardrails.d.ts.map +1 -0
- package/dist/agent/guardrails.js +29 -0
- package/dist/agent/guardrails.js.map +1 -0
- package/dist/agent/instance.d.ts +42 -0
- package/dist/agent/instance.d.ts.map +1 -0
- package/dist/agent/instance.js +82 -0
- package/dist/agent/instance.js.map +1 -0
- package/dist/agent/lifecycle.d.ts +31 -0
- package/dist/agent/lifecycle.d.ts.map +1 -0
- package/dist/agent/lifecycle.js +184 -0
- package/dist/agent/lifecycle.js.map +1 -0
- package/dist/agent/state.d.ts +6 -0
- package/dist/agent/state.d.ts.map +1 -0
- package/dist/agent/state.js +119 -0
- package/dist/agent/state.js.map +1 -0
- package/dist/agent/telemetry.d.ts +12 -0
- package/dist/agent/telemetry.d.ts.map +1 -0
- package/dist/agent/telemetry.js +176 -0
- package/dist/agent/telemetry.js.map +1 -0
- package/dist/agent/tool-execution.d.ts +6 -0
- package/dist/agent/tool-execution.d.ts.map +1 -0
- package/dist/agent/tool-execution.js +176 -0
- package/dist/agent/tool-execution.js.map +1 -0
- package/dist/agent-run-view.d.ts +9 -0
- package/dist/agent-run-view.d.ts.map +1 -0
- package/dist/agent-run-view.js +42 -0
- package/dist/agent-run-view.js.map +1 -0
- package/dist/agent-store/file.d.ts +11 -0
- package/dist/agent-store/file.d.ts.map +1 -0
- package/dist/agent-store/file.js +534 -0
- package/dist/agent-store/file.js.map +1 -0
- package/dist/agent-store/memory.d.ts +9 -0
- package/dist/agent-store/memory.d.ts.map +1 -0
- package/dist/agent-store/memory.js +198 -0
- package/dist/agent-store/memory.js.map +1 -0
- package/dist/agent-store/postgres.d.ts +4 -0
- package/dist/agent-store/postgres.d.ts.map +1 -0
- package/dist/agent-store/postgres.js +374 -0
- package/dist/agent-store/postgres.js.map +1 -0
- package/dist/agent-store/shared.d.ts +19 -0
- package/dist/agent-store/shared.d.ts.map +1 -0
- package/dist/agent-store/shared.js +137 -0
- package/dist/agent-store/shared.js.map +1 -0
- package/dist/agent-store/sqlite.d.ts +4 -0
- package/dist/agent-store/sqlite.d.ts.map +1 -0
- package/dist/agent-store/sqlite.js +362 -0
- package/dist/agent-store/sqlite.js.map +1 -0
- package/dist/agent-store.d.ts +5 -21
- package/dist/agent-store.d.ts.map +1 -1
- package/dist/agent-store.js +5 -1588
- package/dist/agent-store.js.map +1 -1
- package/dist/agent.d.ts +6 -57
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +6 -2631
- package/dist/agent.js.map +1 -1
- package/dist/agents-entry.d.ts +19 -0
- package/dist/agents-entry.d.ts.map +1 -0
- package/dist/agents-entry.js +14 -0
- package/dist/agents-entry.js.map +1 -0
- package/dist/artifact/file.d.ts +6 -0
- package/dist/artifact/file.d.ts.map +1 -0
- package/dist/artifact/file.js +380 -0
- package/dist/artifact/file.js.map +1 -0
- package/dist/artifact/memory.d.ts +3 -0
- package/dist/artifact/memory.d.ts.map +1 -0
- package/dist/artifact/memory.js +80 -0
- package/dist/artifact/memory.js.map +1 -0
- package/dist/artifact/postgres.d.ts +3 -0
- package/dist/artifact/postgres.d.ts.map +1 -0
- package/dist/artifact/postgres.js +283 -0
- package/dist/artifact/postgres.js.map +1 -0
- package/dist/artifact/shared.d.ts +208 -0
- package/dist/artifact/shared.d.ts.map +1 -0
- package/dist/artifact/shared.js +523 -0
- package/dist/artifact/shared.js.map +1 -0
- package/dist/artifact/sqlite.d.ts +3 -0
- package/dist/artifact/sqlite.d.ts.map +1 -0
- package/dist/artifact/sqlite.js +283 -0
- package/dist/artifact/sqlite.js.map +1 -0
- package/dist/artifact.d.ts +6 -186
- package/dist/artifact.d.ts.map +1 -1
- package/dist/artifact.js +6 -1536
- package/dist/artifact.js.map +1 -1
- package/dist/catalog-contracts.d.ts +52 -0
- package/dist/catalog-contracts.d.ts.map +1 -0
- package/dist/catalog-contracts.js +250 -0
- package/dist/catalog-contracts.js.map +1 -0
- package/dist/catalog.d.ts +3 -52
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +3 -249
- package/dist/catalog.js.map +1 -1
- package/dist/generate-cache-file.d.ts +11 -0
- package/dist/generate-cache-file.d.ts.map +1 -0
- package/dist/generate-cache-file.js +124 -0
- package/dist/generate-cache-file.js.map +1 -0
- package/dist/generate-text.d.ts +2 -5
- package/dist/generate-text.d.ts.map +1 -1
- package/dist/generate-text.js +3 -18
- package/dist/generate-text.js.map +1 -1
- package/dist/generation-entry.d.ts +6 -0
- package/dist/generation-entry.d.ts.map +1 -0
- package/dist/generation-entry.js +6 -0
- package/dist/generation-entry.js.map +1 -0
- package/dist/middleware-runtime.d.ts +35 -0
- package/dist/middleware-runtime.d.ts.map +1 -0
- package/dist/middleware-runtime.js +532 -0
- package/dist/middleware-runtime.js.map +1 -0
- package/dist/middleware.d.ts +3 -43
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +3 -653
- package/dist/middleware.js.map +1 -1
- package/dist/normalize-messages.d.ts +3 -0
- package/dist/normalize-messages.d.ts.map +1 -0
- package/dist/normalize-messages.js +16 -0
- package/dist/normalize-messages.js.map +1 -0
- package/dist/provider-entry.d.ts +17 -0
- package/dist/provider-entry.d.ts.map +1 -0
- package/dist/provider-entry.js +13 -0
- package/dist/provider-entry.js.map +1 -0
- package/dist/realtime.d.ts +2 -0
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +6 -0
- package/dist/realtime.js.map +1 -1
- package/dist/store-key.d.ts +3 -0
- package/dist/store-key.d.ts.map +1 -0
- package/dist/store-key.js +5 -0
- package/dist/store-key.js.map +1 -0
- package/dist/store-security.d.ts +1 -2
- package/dist/store-security.d.ts.map +1 -1
- package/dist/store-security.js +2 -4
- package/dist/store-security.js.map +1 -1
- package/dist/types/agent-state.d.ts +236 -0
- package/dist/types/agent-state.d.ts.map +1 -0
- package/dist/types/agent-state.js +2 -0
- package/dist/types/agent-state.js.map +1 -0
- package/dist/types/agents.d.ts +429 -0
- package/dist/types/agents.d.ts.map +1 -0
- package/dist/types/agents.js +2 -0
- package/dist/types/agents.js.map +1 -0
- package/dist/types/common.d.ts +179 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/generation.d.ts +109 -0
- package/dist/types/generation.d.ts.map +1 -0
- package/dist/types/generation.js +2 -0
- package/dist/types/generation.js.map +1 -0
- package/dist/types/media-data.d.ts +65 -0
- package/dist/types/media-data.d.ts.map +1 -0
- package/dist/types/media-data.js +2 -0
- package/dist/types/media-data.js.map +1 -0
- package/dist/types/media.d.ts +141 -0
- package/dist/types/media.d.ts.map +1 -0
- package/dist/types/media.js +2 -0
- package/dist/types/media.js.map +1 -0
- package/dist/types/messages.d.ts +82 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/middleware.d.ts +130 -0
- package/dist/types/middleware.d.ts.map +1 -0
- package/dist/types/middleware.js +2 -0
- package/dist/types/middleware.js.map +1 -0
- package/dist/types/model-tools.d.ts +409 -0
- package/dist/types/model-tools.d.ts.map +1 -0
- package/dist/types/model-tools.js +2 -0
- package/dist/types/model-tools.js.map +1 -0
- package/dist/types/persistence.d.ts +168 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js +2 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/types/provider-resources.d.ts +336 -0
- package/dist/types/provider-resources.d.ts.map +1 -0
- package/dist/types/provider-resources.js +2 -0
- package/dist/types/provider-resources.js.map +1 -0
- package/dist/types/provider.d.ts +23 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +2 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/resource-options.d.ts +88 -0
- package/dist/types/resource-options.d.ts.map +1 -0
- package/dist/types/resource-options.js +2 -0
- package/dist/types/resource-options.js.map +1 -0
- package/dist/types/stream.d.ts +70 -0
- package/dist/types/stream.d.ts.map +1 -0
- package/dist/types/stream.js +2 -0
- package/dist/types/stream.js.map +1 -0
- package/dist/types/ui.d.ts +110 -0
- package/dist/types/ui.d.ts.map +1 -0
- package/dist/types/ui.js +2 -0
- package/dist/types/ui.js.map +1 -0
- package/dist/types.d.ts +16 -2480
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +2 -0
- package/dist/ui.js.map +1 -1
- package/dist/workflow-state-service/file.d.ts +5 -0
- package/dist/workflow-state-service/file.d.ts.map +1 -0
- package/dist/workflow-state-service/file.js +142 -0
- package/dist/workflow-state-service/file.js.map +1 -0
- package/dist/workflow-state-service/memory.d.ts +3 -0
- package/dist/workflow-state-service/memory.d.ts.map +1 -0
- package/dist/workflow-state-service/memory.js +27 -0
- package/dist/workflow-state-service/memory.js.map +1 -0
- package/dist/workflow-state-service/postgres.d.ts +4 -0
- package/dist/workflow-state-service/postgres.d.ts.map +1 -0
- package/dist/workflow-state-service/postgres.js +179 -0
- package/dist/workflow-state-service/postgres.js.map +1 -0
- package/dist/workflow-state-service/shared.d.ts +43 -0
- package/dist/workflow-state-service/shared.d.ts.map +1 -0
- package/dist/workflow-state-service/shared.js +107 -0
- package/dist/workflow-state-service/shared.js.map +1 -0
- package/dist/workflow-state-service/sqlite.d.ts +4 -0
- package/dist/workflow-state-service/sqlite.d.ts.map +1 -0
- package/dist/workflow-state-service/sqlite.js +183 -0
- package/dist/workflow-state-service/sqlite.js.map +1 -0
- package/dist/workflow-state-service.d.ts +6 -33
- package/dist/workflow-state-service.d.ts.map +1 -1
- package/dist/workflow-state-service.js +6 -626
- package/dist/workflow-state-service.js.map +1 -1
- package/package.json +17 -1
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { ValidationError } from "./errors.js";
|
|
3
|
+
const cacheKeySensitiveField = /(?:^|[-_])(api[-_]?key|authorization|cookie|credential|password|secret|token)(?:$|[-_])/iu;
|
|
4
|
+
const cacheKeyOmittedFields = new Set([
|
|
5
|
+
"abortSignal",
|
|
6
|
+
"execute",
|
|
7
|
+
"inputGuardrails",
|
|
8
|
+
"isEnabled",
|
|
9
|
+
"onError",
|
|
10
|
+
"outputGuardrails",
|
|
11
|
+
"signal"
|
|
12
|
+
]);
|
|
13
|
+
const canonicalCacheInput = (value, seen = new WeakSet()) => {
|
|
14
|
+
if (value === null)
|
|
15
|
+
return "null";
|
|
16
|
+
if (value === undefined)
|
|
17
|
+
return '"[undefined]"';
|
|
18
|
+
if (typeof value === "string" || typeof value === "boolean")
|
|
19
|
+
return JSON.stringify(value);
|
|
20
|
+
if (typeof value === "number") {
|
|
21
|
+
if (Number.isNaN(value))
|
|
22
|
+
return '"[number:NaN]"';
|
|
23
|
+
if (value === Number.POSITIVE_INFINITY)
|
|
24
|
+
return '"[number:Infinity]"';
|
|
25
|
+
if (value === Number.NEGATIVE_INFINITY)
|
|
26
|
+
return '"[number:-Infinity]"';
|
|
27
|
+
return JSON.stringify(Object.is(value, -0) ? 0 : value);
|
|
28
|
+
}
|
|
29
|
+
if (typeof value === "bigint")
|
|
30
|
+
return JSON.stringify(`[bigint:${value.toString()}]`);
|
|
31
|
+
if (typeof value === "function" || typeof value === "symbol") {
|
|
32
|
+
throw new TypeError("Generate cache keys cannot canonicalize functions or symbols.");
|
|
33
|
+
}
|
|
34
|
+
if (value instanceof Date)
|
|
35
|
+
return JSON.stringify(`[date:${value.toISOString()}]`);
|
|
36
|
+
if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {
|
|
37
|
+
const bytes = value instanceof ArrayBuffer
|
|
38
|
+
? new Uint8Array(value)
|
|
39
|
+
: new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
40
|
+
return JSON.stringify(`[bytes:sha256:${createHash("sha256").update(bytes).digest("hex")}]`);
|
|
41
|
+
}
|
|
42
|
+
if (typeof AbortSignal !== "undefined" && value instanceof AbortSignal) {
|
|
43
|
+
return '"[abort-signal]"';
|
|
44
|
+
}
|
|
45
|
+
if (seen.has(value)) {
|
|
46
|
+
throw new TypeError("Generate cache keys cannot canonicalize cyclic input.");
|
|
47
|
+
}
|
|
48
|
+
seen.add(value);
|
|
49
|
+
try {
|
|
50
|
+
if (Array.isArray(value)) {
|
|
51
|
+
return `[${value.map((entry) => canonicalCacheInput(entry, seen)).join(",")}]`;
|
|
52
|
+
}
|
|
53
|
+
return `{${Object.keys(value)
|
|
54
|
+
.filter((key) => !cacheKeyOmittedFields.has(key))
|
|
55
|
+
.sort()
|
|
56
|
+
.map((key) => {
|
|
57
|
+
if (cacheKeySensitiveField.test(key)) {
|
|
58
|
+
throw new TypeError("Generate cache keys cannot include sensitive fields.");
|
|
59
|
+
}
|
|
60
|
+
const entry = value[key];
|
|
61
|
+
const serialized = canonicalCacheInput(entry, seen);
|
|
62
|
+
return `${JSON.stringify(key)}:${serialized}`;
|
|
63
|
+
})
|
|
64
|
+
.join(",")}}`;
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
seen.delete(value);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const createDefaultGenerateCacheKey = (input) => `generate:v2:${createHash("sha256").update(canonicalCacheInput(input)).digest("hex")}`;
|
|
71
|
+
const defaultGenerateCacheModelScopes = new WeakMap();
|
|
72
|
+
const getDefaultGenerateCacheModelScope = (model) => {
|
|
73
|
+
const existing = defaultGenerateCacheModelScopes.get(model);
|
|
74
|
+
if (existing) {
|
|
75
|
+
return existing;
|
|
76
|
+
}
|
|
77
|
+
const created = `model-instance:${randomUUID()}`;
|
|
78
|
+
defaultGenerateCacheModelScopes.set(model, created);
|
|
79
|
+
return created;
|
|
80
|
+
};
|
|
81
|
+
const telemetryObserversSymbol = Symbol("zhivex-ai.telemetry-observers");
|
|
82
|
+
const getTelemetryObservers = (model) => [...(model[telemetryObserversSymbol] ?? [])];
|
|
83
|
+
export const emitLanguageModelTelemetryEvent = async (model, event) => {
|
|
84
|
+
const observers = getTelemetryObservers(model);
|
|
85
|
+
for (const observer of observers) {
|
|
86
|
+
await observer(event);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
export const wrapLanguageModel = (model, middlewares) => {
|
|
90
|
+
if (!middlewares.length) {
|
|
91
|
+
return model;
|
|
92
|
+
}
|
|
93
|
+
const runGenerate = async (input) => {
|
|
94
|
+
let index = -1;
|
|
95
|
+
const run = async (position) => {
|
|
96
|
+
if (position <= index) {
|
|
97
|
+
throw new Error("Language model middleware called next() multiple times.");
|
|
98
|
+
}
|
|
99
|
+
index = position;
|
|
100
|
+
const middleware = middlewares[position];
|
|
101
|
+
if (!middleware?.wrapGenerate) {
|
|
102
|
+
return position >= middlewares.length ? model.generate(input) : run(position + 1);
|
|
103
|
+
}
|
|
104
|
+
return middleware.wrapGenerate({ model, input }, () => run(position + 1));
|
|
105
|
+
};
|
|
106
|
+
return run(0);
|
|
107
|
+
};
|
|
108
|
+
const runStream = async (input) => {
|
|
109
|
+
if (!model.stream) {
|
|
110
|
+
throw new Error(`Language model "${model.provider}/${model.modelId}" does not support streaming.`);
|
|
111
|
+
}
|
|
112
|
+
let index = -1;
|
|
113
|
+
const run = async (position) => {
|
|
114
|
+
if (position <= index) {
|
|
115
|
+
throw new Error("Language model middleware called next() multiple times.");
|
|
116
|
+
}
|
|
117
|
+
index = position;
|
|
118
|
+
const middleware = middlewares[position];
|
|
119
|
+
if (!middleware?.wrapStream) {
|
|
120
|
+
return position >= middlewares.length ? model.stream(input) : run(position + 1);
|
|
121
|
+
}
|
|
122
|
+
return middleware.wrapStream({ model, input }, () => run(position + 1));
|
|
123
|
+
};
|
|
124
|
+
return run(0);
|
|
125
|
+
};
|
|
126
|
+
const wrappedModel = {
|
|
127
|
+
...model,
|
|
128
|
+
generate(input) {
|
|
129
|
+
return runGenerate(input);
|
|
130
|
+
},
|
|
131
|
+
stream: model.stream
|
|
132
|
+
? (input) => runStream(input)
|
|
133
|
+
: undefined
|
|
134
|
+
};
|
|
135
|
+
const telemetryObservers = [
|
|
136
|
+
...getTelemetryObservers(model),
|
|
137
|
+
...middlewares
|
|
138
|
+
.filter((middleware) => middleware.name === "telemetry")
|
|
139
|
+
.map((middleware) => (event) => {
|
|
140
|
+
const telemetryMiddleware = middleware;
|
|
141
|
+
return telemetryMiddleware.onTelemetryEvent?.(event);
|
|
142
|
+
})
|
|
143
|
+
.filter(Boolean)
|
|
144
|
+
];
|
|
145
|
+
if (telemetryObservers.length) {
|
|
146
|
+
Object.defineProperty(wrappedModel, telemetryObserversSymbol, {
|
|
147
|
+
value: telemetryObservers,
|
|
148
|
+
enumerable: false,
|
|
149
|
+
configurable: false
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return wrappedModel;
|
|
153
|
+
};
|
|
154
|
+
export const createTelemetryMiddleware = (options) => {
|
|
155
|
+
let nextGenerateId = 1;
|
|
156
|
+
let nextStreamId = 1;
|
|
157
|
+
const reportTelemetry = async (event) => {
|
|
158
|
+
try {
|
|
159
|
+
await options.onEvent(event);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Telemetry is best-effort and never owns the model operation outcome.
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
const middleware = {
|
|
166
|
+
name: "telemetry",
|
|
167
|
+
onTelemetryEvent: reportTelemetry,
|
|
168
|
+
async wrapGenerate(context, next) {
|
|
169
|
+
const generateId = nextGenerateId;
|
|
170
|
+
nextGenerateId += 1;
|
|
171
|
+
const startedAt = Date.now();
|
|
172
|
+
await reportTelemetry({
|
|
173
|
+
type: "generate-start",
|
|
174
|
+
generateId,
|
|
175
|
+
model: context.model,
|
|
176
|
+
input: context.input,
|
|
177
|
+
startedAt
|
|
178
|
+
});
|
|
179
|
+
try {
|
|
180
|
+
const output = await next();
|
|
181
|
+
const finishedAt = Date.now();
|
|
182
|
+
await reportTelemetry({
|
|
183
|
+
type: "generate-finish",
|
|
184
|
+
generateId,
|
|
185
|
+
model: context.model,
|
|
186
|
+
input: context.input,
|
|
187
|
+
output,
|
|
188
|
+
startedAt,
|
|
189
|
+
finishedAt,
|
|
190
|
+
latencyMs: finishedAt - startedAt
|
|
191
|
+
});
|
|
192
|
+
return output;
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
const finishedAt = Date.now();
|
|
196
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
197
|
+
await reportTelemetry({
|
|
198
|
+
type: "generate-error",
|
|
199
|
+
generateId,
|
|
200
|
+
model: context.model,
|
|
201
|
+
input: context.input,
|
|
202
|
+
error: err,
|
|
203
|
+
startedAt,
|
|
204
|
+
finishedAt,
|
|
205
|
+
latencyMs: finishedAt - startedAt
|
|
206
|
+
});
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
async wrapStream(context, next) {
|
|
211
|
+
const streamId = nextStreamId;
|
|
212
|
+
nextStreamId += 1;
|
|
213
|
+
return (async function* () {
|
|
214
|
+
const operationStartedAt = Date.now();
|
|
215
|
+
let finishReason;
|
|
216
|
+
let providerFinishReason;
|
|
217
|
+
let usage;
|
|
218
|
+
let firstChunkAt;
|
|
219
|
+
let previousChunkAt;
|
|
220
|
+
let outputChunkCount = 0;
|
|
221
|
+
let terminalEventEmitted = false;
|
|
222
|
+
try {
|
|
223
|
+
await reportTelemetry({
|
|
224
|
+
type: "stream-start",
|
|
225
|
+
streamId,
|
|
226
|
+
model: context.model,
|
|
227
|
+
input: context.input,
|
|
228
|
+
startedAt: operationStartedAt
|
|
229
|
+
});
|
|
230
|
+
const stream = await next();
|
|
231
|
+
for await (const event of stream) {
|
|
232
|
+
if (event.type === "finish") {
|
|
233
|
+
finishReason = event.finishReason;
|
|
234
|
+
providerFinishReason = event.providerFinishReason;
|
|
235
|
+
usage = event.usage;
|
|
236
|
+
const finishedAt = Date.now();
|
|
237
|
+
terminalEventEmitted = true;
|
|
238
|
+
await reportTelemetry({
|
|
239
|
+
type: "stream-finish",
|
|
240
|
+
streamId,
|
|
241
|
+
model: context.model,
|
|
242
|
+
input: context.input,
|
|
243
|
+
startedAt: operationStartedAt,
|
|
244
|
+
finishedAt,
|
|
245
|
+
latencyMs: finishedAt - operationStartedAt,
|
|
246
|
+
finishReason,
|
|
247
|
+
providerFinishReason,
|
|
248
|
+
usage,
|
|
249
|
+
outputChunkCount
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
else if (event.type === "error") {
|
|
253
|
+
const finishedAt = Date.now();
|
|
254
|
+
terminalEventEmitted = true;
|
|
255
|
+
await reportTelemetry({
|
|
256
|
+
type: "stream-error",
|
|
257
|
+
streamId,
|
|
258
|
+
model: context.model,
|
|
259
|
+
input: context.input,
|
|
260
|
+
error: event.error,
|
|
261
|
+
startedAt: operationStartedAt,
|
|
262
|
+
finishedAt,
|
|
263
|
+
latencyMs: finishedAt - operationStartedAt,
|
|
264
|
+
outputChunkCount
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
const chunkAt = Date.now();
|
|
269
|
+
firstChunkAt ??= chunkAt;
|
|
270
|
+
const timeSincePreviousChunkMs = previousChunkAt === undefined
|
|
271
|
+
? undefined
|
|
272
|
+
: chunkAt - previousChunkAt;
|
|
273
|
+
previousChunkAt = chunkAt;
|
|
274
|
+
outputChunkCount += 1;
|
|
275
|
+
await reportTelemetry({
|
|
276
|
+
type: "stream-chunk",
|
|
277
|
+
streamId,
|
|
278
|
+
model: context.model,
|
|
279
|
+
input: context.input,
|
|
280
|
+
startedAt: operationStartedAt,
|
|
281
|
+
chunkAt,
|
|
282
|
+
chunkIndex: outputChunkCount,
|
|
283
|
+
timeToFirstChunkMs: outputChunkCount === 1 ? chunkAt - operationStartedAt : undefined,
|
|
284
|
+
timeSincePreviousChunkMs
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
yield event;
|
|
288
|
+
if (terminalEventEmitted)
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (!terminalEventEmitted) {
|
|
292
|
+
const finishedAt = Date.now();
|
|
293
|
+
terminalEventEmitted = true;
|
|
294
|
+
await reportTelemetry({
|
|
295
|
+
type: "stream-finish",
|
|
296
|
+
streamId,
|
|
297
|
+
model: context.model,
|
|
298
|
+
input: context.input,
|
|
299
|
+
startedAt: operationStartedAt,
|
|
300
|
+
finishedAt,
|
|
301
|
+
latencyMs: finishedAt - operationStartedAt,
|
|
302
|
+
finishReason,
|
|
303
|
+
providerFinishReason,
|
|
304
|
+
usage,
|
|
305
|
+
outputChunkCount
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
const finishedAt = Date.now();
|
|
311
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
312
|
+
if (!terminalEventEmitted) {
|
|
313
|
+
terminalEventEmitted = true;
|
|
314
|
+
await reportTelemetry({
|
|
315
|
+
type: "stream-error",
|
|
316
|
+
streamId,
|
|
317
|
+
model: context.model,
|
|
318
|
+
input: context.input,
|
|
319
|
+
error: err,
|
|
320
|
+
startedAt: operationStartedAt,
|
|
321
|
+
finishedAt,
|
|
322
|
+
latencyMs: finishedAt - operationStartedAt,
|
|
323
|
+
outputChunkCount
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
throw error;
|
|
327
|
+
}
|
|
328
|
+
finally {
|
|
329
|
+
if (!terminalEventEmitted) {
|
|
330
|
+
terminalEventEmitted = true;
|
|
331
|
+
const finishedAt = Date.now();
|
|
332
|
+
const error = Object.assign(new Error("Stream consumption ended before the provider stream completed."), { name: "AbortError" });
|
|
333
|
+
await reportTelemetry({
|
|
334
|
+
type: "stream-error",
|
|
335
|
+
streamId,
|
|
336
|
+
model: context.model,
|
|
337
|
+
input: context.input,
|
|
338
|
+
error,
|
|
339
|
+
startedAt: operationStartedAt,
|
|
340
|
+
finishedAt,
|
|
341
|
+
latencyMs: finishedAt - operationStartedAt,
|
|
342
|
+
outputChunkCount
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
})();
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
return middleware;
|
|
350
|
+
};
|
|
351
|
+
export const createCachedGenerateMiddleware = (options) => {
|
|
352
|
+
if (typeof options.scope === "string" && options.scope.trim().length === 0) {
|
|
353
|
+
throw new ValidationError('The generate cache "scope" must be a non-empty string.');
|
|
354
|
+
}
|
|
355
|
+
return {
|
|
356
|
+
name: "cache",
|
|
357
|
+
async wrapGenerate(context, next) {
|
|
358
|
+
if (!options.getKey && options.scope === undefined && options.cache.scopeRequirement === "stable") {
|
|
359
|
+
return next();
|
|
360
|
+
}
|
|
361
|
+
let key;
|
|
362
|
+
if (options.getKey) {
|
|
363
|
+
key = options.getKey(context.input, context.model);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
const scope = typeof options.scope === "function"
|
|
367
|
+
? options.scope(context.input, context.model)
|
|
368
|
+
: options.scope ?? getDefaultGenerateCacheModelScope(context.model);
|
|
369
|
+
if (typeof scope !== "string" || scope.trim().length === 0) {
|
|
370
|
+
throw new ValidationError('The generate cache "scope" must resolve to a non-empty string.');
|
|
371
|
+
}
|
|
372
|
+
try {
|
|
373
|
+
key = createDefaultGenerateCacheKey({
|
|
374
|
+
scope,
|
|
375
|
+
provider: context.model.provider,
|
|
376
|
+
modelId: context.model.modelId,
|
|
377
|
+
input: context.input
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return next();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
const cached = await options.cache.get(key);
|
|
385
|
+
if (cached) {
|
|
386
|
+
return cached;
|
|
387
|
+
}
|
|
388
|
+
const output = await next();
|
|
389
|
+
await options.cache.set(key, output);
|
|
390
|
+
return output;
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
};
|
|
394
|
+
export const createInMemoryGenerateCache = () => {
|
|
395
|
+
const store = new Map();
|
|
396
|
+
return {
|
|
397
|
+
get(key) {
|
|
398
|
+
return store.get(key);
|
|
399
|
+
},
|
|
400
|
+
set(key, value) {
|
|
401
|
+
store.set(key, value);
|
|
402
|
+
}
|
|
403
|
+
};
|
|
404
|
+
};
|
|
405
|
+
export const createCircuitBreakerMiddleware = (options) => {
|
|
406
|
+
const failureThreshold = options.failureThreshold ?? 3;
|
|
407
|
+
const cooldownMs = options.cooldownMs ?? 30_000;
|
|
408
|
+
if (!Number.isSafeInteger(failureThreshold) || failureThreshold <= 0) {
|
|
409
|
+
throw new ValidationError('The circuit breaker "failureThreshold" must be a positive safe integer.');
|
|
410
|
+
}
|
|
411
|
+
if (!Number.isSafeInteger(cooldownMs) || cooldownMs < 0) {
|
|
412
|
+
throw new ValidationError('The circuit breaker "cooldownMs" must be a non-negative safe integer.');
|
|
413
|
+
}
|
|
414
|
+
const states = new WeakMap();
|
|
415
|
+
const getState = (model) => {
|
|
416
|
+
const existing = states.get(model);
|
|
417
|
+
if (existing) {
|
|
418
|
+
return existing;
|
|
419
|
+
}
|
|
420
|
+
const created = { failures: 0, halfOpenProbeInFlight: false };
|
|
421
|
+
states.set(model, created);
|
|
422
|
+
return created;
|
|
423
|
+
};
|
|
424
|
+
const notifyStateChange = async (model, state, status) => {
|
|
425
|
+
try {
|
|
426
|
+
await options.onStateChange?.({
|
|
427
|
+
failures: state.failures,
|
|
428
|
+
openedAt: state.openedAt,
|
|
429
|
+
model,
|
|
430
|
+
status
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
catch {
|
|
434
|
+
// State observers are operational hooks and must not alter model outcomes.
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
const openError = (model) => new Error(`Circuit breaker open for model "${model.provider}/${model.modelId}".`);
|
|
438
|
+
const beginRequest = async (model) => {
|
|
439
|
+
const state = getState(model);
|
|
440
|
+
if (state.openedAt === undefined) {
|
|
441
|
+
return { state, halfOpenProbe: false };
|
|
442
|
+
}
|
|
443
|
+
const cooldownElapsed = Date.now() - state.openedAt >= cooldownMs;
|
|
444
|
+
if (!cooldownElapsed || state.halfOpenProbeInFlight) {
|
|
445
|
+
throw openError(model);
|
|
446
|
+
}
|
|
447
|
+
state.halfOpenProbeInFlight = true;
|
|
448
|
+
await notifyStateChange(model, state, "half-open");
|
|
449
|
+
return { state, halfOpenProbe: true };
|
|
450
|
+
};
|
|
451
|
+
const markSuccess = async (model, permit) => {
|
|
452
|
+
const { state } = permit;
|
|
453
|
+
if (!permit.halfOpenProbe && state.openedAt !== undefined) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
const changed = state.failures > 0 || state.openedAt !== undefined || state.halfOpenProbeInFlight;
|
|
457
|
+
state.failures = 0;
|
|
458
|
+
state.openedAt = undefined;
|
|
459
|
+
state.halfOpenProbeInFlight = false;
|
|
460
|
+
if (changed) {
|
|
461
|
+
await notifyStateChange(model, state, "closed");
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
const markFailure = async (model, permit, error) => {
|
|
465
|
+
const { state } = permit;
|
|
466
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
467
|
+
let isFailure = true;
|
|
468
|
+
try {
|
|
469
|
+
isFailure = options.isFailure?.(err) ?? true;
|
|
470
|
+
}
|
|
471
|
+
catch {
|
|
472
|
+
isFailure = true;
|
|
473
|
+
}
|
|
474
|
+
if (!isFailure) {
|
|
475
|
+
if (permit.halfOpenProbe) {
|
|
476
|
+
await markSuccess(model, permit);
|
|
477
|
+
}
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
const wasOpen = state.openedAt !== undefined;
|
|
481
|
+
state.failures += 1;
|
|
482
|
+
if (permit.halfOpenProbe) {
|
|
483
|
+
state.halfOpenProbeInFlight = false;
|
|
484
|
+
state.openedAt = Date.now();
|
|
485
|
+
await notifyStateChange(model, state, "open");
|
|
486
|
+
}
|
|
487
|
+
else if (!wasOpen && state.failures >= failureThreshold) {
|
|
488
|
+
state.openedAt = Date.now();
|
|
489
|
+
await notifyStateChange(model, state, "open");
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
return {
|
|
493
|
+
name: "circuit-breaker",
|
|
494
|
+
async wrapGenerate(context, next) {
|
|
495
|
+
const permit = await beginRequest(context.model);
|
|
496
|
+
try {
|
|
497
|
+
const result = await next();
|
|
498
|
+
await markSuccess(context.model, permit);
|
|
499
|
+
return result;
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
await markFailure(context.model, permit, error);
|
|
503
|
+
throw error;
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
async wrapStream(context, next) {
|
|
507
|
+
return (async function* () {
|
|
508
|
+
const permit = await beginRequest(context.model);
|
|
509
|
+
let settled = false;
|
|
510
|
+
try {
|
|
511
|
+
const stream = await next();
|
|
512
|
+
for await (const event of stream) {
|
|
513
|
+
yield event;
|
|
514
|
+
}
|
|
515
|
+
await markSuccess(context.model, permit);
|
|
516
|
+
settled = true;
|
|
517
|
+
}
|
|
518
|
+
catch (error) {
|
|
519
|
+
await markFailure(context.model, permit, error);
|
|
520
|
+
settled = true;
|
|
521
|
+
throw error;
|
|
522
|
+
}
|
|
523
|
+
finally {
|
|
524
|
+
if (!settled && permit.halfOpenProbe) {
|
|
525
|
+
permit.state.halfOpenProbeInFlight = false;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
})();
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
};
|
|
532
|
+
//# sourceMappingURL=middleware-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-runtime.js","sourceRoot":"","sources":["../src/middleware-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAa9C,MAAM,sBAAsB,GAAG,2FAA2F,CAAC;AAC3H,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,aAAa;IACb,SAAS;IACT,iBAAiB;IACjB,WAAW;IACX,SAAS;IACT,kBAAkB;IAClB,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAE,IAAI,GAAG,IAAI,OAAO,EAAU,EAAU,EAAE;IACnF,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1F,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,gBAAgB,CAAC;QACjD,IAAI,KAAK,KAAK,MAAM,CAAC,iBAAiB;YAAE,OAAO,qBAAqB,CAAC;QACrE,IAAI,KAAK,KAAK,MAAM,CAAC,iBAAiB;YAAE,OAAO,sBAAsB,CAAC;QACtE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACrF,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAClF,IAAI,KAAK,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,KAAK,YAAY,WAAW;YACxC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC;YACvB,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACvE,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACjF,CAAC;QAED,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aAC1B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAChD,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;QAChD,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,KAAc,EAAU,EAAE,CAC/D,eAAe,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACzF,MAAM,+BAA+B,GAAG,IAAI,OAAO,EAAyB,CAAC;AAC7E,MAAM,iCAAiC,GAAG,CAAC,KAAoB,EAAU,EAAE;IACzE,MAAM,QAAQ,GAAG,+BAA+B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAG,kBAAkB,UAAU,EAAE,EAAE,CAAC;IACjD,+BAA+B,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AACF,MAAM,wBAAwB,GAAG,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAgBzE,MAAM,qBAAqB,GAAG,CAC5B,KAAsC,EACC,EAAE,CACzC,CAAC,GAAI,CAAE,KAAsD,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAA2C,CAAC,CAAC;AAE5I,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,EAClD,KAAsC,EACtC,KAAoD,EACpD,EAAE;IACF,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC/C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAsC,EACtC,WAA6D,EAC5B,EAAE;IACnC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,EAAE,KAA2C,EAA2B,EAAE;QACjG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QAEf,MAAM,GAAG,GAAG,KAAK,EAAE,QAAgB,EAA2B,EAAE;YAC9D,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC7E,CAAC;YAED,KAAK,GAAG,QAAQ,CAAC;YACjB,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC;gBAC9B,OAAO,QAAQ,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YACpF,CAAC;YAED,OAAO,UAAU,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC;QAEF,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,KAA2C,EAAuC,EAAE;QAC3G,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;QACrG,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QAEf,MAAM,GAAG,GAAG,KAAK,EAAE,QAAgB,EAAuC,EAAE;YAC1E,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC7E,CAAC;YAED,KAAK,GAAG,QAAQ,CAAC;YACjB,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC;gBAC5B,OAAO,QAAQ,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YACnF,CAAC;YAED,OAAO,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAiD;QACjE,GAAG,KAAK;QACR,QAAQ,CAAC,KAA2C;YAClD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,EAAE,KAAK,CAAC,MAAM;YAClB,CAAC,CAAC,CAAC,KAA2C,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;YACnE,CAAC,CAAC,SAAS;KACd,CAAC;IAEF,MAAM,kBAAkB,GAAG;QACzB,GAAG,qBAAqB,CAAC,KAAK,CAAC;QAC/B,GAAG,WAAW;aACX,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,WAAW,CAAC;aACvD,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAoD,EAAE,EAAE;YAC5E,MAAM,mBAAmB,GAAG,UAE3B,CAAC;YACF,OAAO,mBAAmB,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC;KACnB,CAAC;IAEF,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,wBAAwB,EAAE;YAC5D,KAAK,EAAE,kBAAkB;YACzB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAA2C,OAEnF,EAA6C,EAAE;IAC9C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,eAAe,GAAG,KAAK,EAAE,KAAoD,EAAE,EAAE;QACrF,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;IACH,CAAC,CAAC;IACF,MAAM,UAAU,GAEZ;QACF,IAAI,EAAE,WAAW;QACjB,gBAAgB,EAAE,eAAe;QACjC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI;YAChC,MAAM,UAAU,GAAG,cAAc,CAAC;YAClC,cAAc,IAAI,CAAC,CAAC;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,eAAe,CAAC;gBACpB,IAAI,EAAE,gBAAgB;gBACtB,UAAU;gBACV,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS;aACV,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC9B,MAAM,eAAe,CAAC;oBACpB,IAAI,EAAE,iBAAiB;oBACvB,UAAU;oBACV,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM;oBACN,SAAS;oBACT,UAAU;oBACV,SAAS,EAAE,UAAU,GAAG,SAAS;iBAClC,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,MAAM,eAAe,CAAC;oBACpB,IAAI,EAAE,gBAAgB;oBACtB,UAAU;oBACV,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,GAAG;oBACV,SAAS;oBACT,UAAU;oBACV,SAAS,EAAE,UAAU,GAAG,SAAS;iBAClC,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI;YAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC;YAC9B,YAAY,IAAI,CAAC,CAAC;YAElB,OAAO,CAAC,KAAK,SAAS,CAAC;gBACnB,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACtC,IAAI,YAAsC,CAAC;gBAC3C,IAAI,oBAAwC,CAAC;gBAC7C,IAAI,KAAwD,CAAC;gBAC7D,IAAI,YAAgC,CAAC;gBACrC,IAAI,eAAmC,CAAC;gBACxC,IAAI,gBAAgB,GAAG,CAAC,CAAC;gBACzB,IAAI,oBAAoB,GAAG,KAAK,CAAC;gBAEjC,IAAI,CAAC;oBACH,MAAM,eAAe,CAAC;wBACpB,IAAI,EAAE,cAAc;wBACpB,QAAQ;wBACR,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,SAAS,EAAE,kBAAkB;qBAC9B,CAAC,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;oBAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC5B,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;4BAClC,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC;4BAClD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;4BACpB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BAC9B,oBAAoB,GAAG,IAAI,CAAC;4BAC5B,MAAM,eAAe,CAAC;gCACpB,IAAI,EAAE,eAAe;gCACrB,QAAQ;gCACR,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,SAAS,EAAE,kBAAkB;gCAC7B,UAAU;gCACV,SAAS,EAAE,UAAU,GAAG,kBAAkB;gCAC1C,YAAY;gCACZ,oBAAoB;gCACpB,KAAK;gCACL,gBAAgB;6BACjB,CAAC,CAAC;wBACL,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BAC9B,oBAAoB,GAAG,IAAI,CAAC;4BAC5B,MAAM,eAAe,CAAC;gCACpB,IAAI,EAAE,cAAc;gCACpB,QAAQ;gCACR,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gCAClB,SAAS,EAAE,kBAAkB;gCAC7B,UAAU;gCACV,SAAS,EAAE,UAAU,GAAG,kBAAkB;gCAC1C,gBAAgB;6BACjB,CAAC,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACN,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;4BAC3B,YAAY,KAAK,OAAO,CAAC;4BACzB,MAAM,wBAAwB,GAAG,eAAe,KAAK,SAAS;gCAC5D,CAAC,CAAC,SAAS;gCACX,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC;4BAC9B,eAAe,GAAG,OAAO,CAAC;4BAC1B,gBAAgB,IAAI,CAAC,CAAC;4BACtB,MAAM,eAAe,CAAC;gCACpB,IAAI,EAAE,cAAc;gCACpB,QAAQ;gCACR,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gCACpB,SAAS,EAAE,kBAAkB;gCAC7B,OAAO;gCACP,UAAU,EAAE,gBAAgB;gCAC5B,kBAAkB,EAAE,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,SAAS;gCACrF,wBAAwB;6BACzB,CAAC,CAAC;wBACL,CAAC;wBAED,MAAM,KAAK,CAAC;wBACZ,IAAI,oBAAoB;4BAAE,OAAO;oBACnC,CAAC;oBAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC9B,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM,eAAe,CAAC;4BACpB,IAAI,EAAE,eAAe;4BACrB,QAAQ;4BACR,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,SAAS,EAAE,kBAAkB;4BAC7B,UAAU;4BACV,SAAS,EAAE,UAAU,GAAG,kBAAkB;4BAC1C,YAAY;4BACZ,oBAAoB;4BACpB,KAAK;4BACL,gBAAgB;yBACjB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtE,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBAC1B,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM,eAAe,CAAC;4BACpB,IAAI,EAAE,cAAc;4BACpB,QAAQ;4BACR,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,KAAK,EAAE,GAAG;4BACV,SAAS,EAAE,kBAAkB;4BAC7B,UAAU;4BACV,SAAS,EAAE,UAAU,GAAG,kBAAkB;4BAC1C,gBAAgB;yBACjB,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBAC1B,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACzB,IAAI,KAAK,CAAC,gEAAgE,CAAC,EAC3E,EAAE,IAAI,EAAE,YAAY,EAAE,CACvB,CAAC;wBACF,MAAM,eAAe,CAAC;4BACpB,IAAI,EAAE,cAAc;4BACpB,QAAQ;4BACR,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,KAAK;4BACL,SAAS,EAAE,kBAAkB;4BAC7B,UAAU;4BACV,SAAS,EAAE,UAAU,GAAG,kBAAkB;4BAC1C,gBAAgB;yBACjB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;KACA,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAA2C,OAUxF,EAA6C,EAAE;IAC9C,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,eAAe,CAAC,wDAAwD,CAAC,CAAC;IACtF,CAAC;IAED,OAAO;QACP,IAAI,EAAE,OAAO;QACb,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI;YAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;gBAClG,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YACD,IAAI,GAAW,CAAC;YAChB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;oBAC/C,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;oBAC7C,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,iCAAiC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3D,MAAM,IAAI,eAAe,CAAC,gEAAgE,CAAC,CAAC;gBAC9F,CAAC;gBACD,IAAI,CAAC;oBACH,GAAG,GAAG,6BAA6B,CAAC;wBAClC,KAAK;wBACL,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;wBAChC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;wBAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;qBACrB,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,IAAI,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;YAC5B,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC;QAChB,CAAC;KACA,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAkB,EAAE;IAC7D,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEhD,OAAO;QACL,GAAG,CAAC,GAAG;YACL,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,GAAG,CAAC,GAAG,EAAE,KAAK;YACZ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAA2C,OAMxF,EAA6C,EAAE;IAC9C,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,eAAe,CAAC,yEAAyE,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,eAAe,CAAC,uEAAuE,CAAC,CAAC;IACrG,CAAC;IAMD,MAAM,MAAM,GAAG,IAAI,OAAO,EAAgE,CAAC;IAC3F,MAAM,QAAQ,GAAG,CAAC,KAAsC,EAA+B,EAAE;QACvF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAgC,EAAE,QAAQ,EAAE,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;QAC3F,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,iBAAiB,GAAG,KAAK,EAC7B,KAAsC,EACtC,KAAkC,EAClC,MAAuC,EACxB,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK;gBACL,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,2EAA2E;QAC7E,CAAC;IACH,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,KAAsC,EAAE,EAAE,CAC3D,IAAI,KAAK,CAAC,mCAAmC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAEpF,MAAM,YAAY,GAAG,KAAK,EAAE,KAAsC,EAAiC,EAAE;QACnG,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QACzC,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC;QAClE,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;YACpD,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACnC,MAAM,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QACnD,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EACvB,KAAsC,EACtC,MAA4B,EACb,EAAE;QACjB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,qBAAqB,CAAC;QAClG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;QACnB,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC3B,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EACvB,KAAsC,EACtC,MAA4B,EAC5B,KAAc,EACC,EAAE;QACjB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACH,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC;QAC7C,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACpC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YAC1D,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,MAAM,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI;YAC9B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC5B,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACzC,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAChD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI;YAC5B,OAAO,CAAC,KAAK,SAAS,CAAC;gBACrB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;oBAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBACjC,MAAM,KAAK,CAAC;oBACd,CAAC;oBACD,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACzC,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;oBAChD,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM,KAAK,CAAC;gBACd,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;wBACrC,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/middleware.d.ts
CHANGED
|
@@ -1,44 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
readonly scopeRequirement?: "stable";
|
|
5
|
-
get(key: string): Promise<GenerateResult | undefined> | GenerateResult | undefined;
|
|
6
|
-
set(key: string, value: GenerateResult): Promise<void> | void;
|
|
7
|
-
}
|
|
8
|
-
export declare const emitLanguageModelTelemetryEvent: <TProviderOptions extends ProviderOptions>(model: LanguageModel<TProviderOptions>, event: LanguageModelTelemetryEvent<TProviderOptions>) => Promise<void>;
|
|
9
|
-
export declare const wrapLanguageModel: <TProviderOptions extends ProviderOptions>(model: LanguageModel<TProviderOptions>, middlewares: Array<LanguageModelMiddleware<TProviderOptions>>) => LanguageModel<TProviderOptions>;
|
|
10
|
-
export declare const createTelemetryMiddleware: <TProviderOptions extends ProviderOptions>(options: {
|
|
11
|
-
onEvent: (event: LanguageModelTelemetryEvent<TProviderOptions>) => void | Promise<void>;
|
|
12
|
-
}) => LanguageModelMiddleware<TProviderOptions>;
|
|
13
|
-
export declare const createCachedGenerateMiddleware: <TProviderOptions extends ProviderOptions>(options: {
|
|
14
|
-
cache: GenerateCache;
|
|
15
|
-
/**
|
|
16
|
-
* Cache namespace for the model's authentication and tenant boundary. Use a stable value for
|
|
17
|
-
* persistent caches and distinct values for distinct credentials, tenants, or upstream URLs.
|
|
18
|
-
* Without an explicit scope, cache entries are isolated to the model instance and process.
|
|
19
|
-
*/
|
|
20
|
-
scope?: string | ((input: ModelGenerateInput<TProviderOptions>, model: LanguageModel<TProviderOptions>) => string);
|
|
21
|
-
/** A custom key owns the complete partitioning contract, including authentication and tenant boundaries. */
|
|
22
|
-
getKey?: (input: ModelGenerateInput<TProviderOptions>, model: LanguageModel<TProviderOptions>) => string;
|
|
23
|
-
}) => LanguageModelMiddleware<TProviderOptions>;
|
|
24
|
-
export declare const createInMemoryGenerateCache: () => GenerateCache;
|
|
25
|
-
export declare const createFileGenerateCache: (options: {
|
|
26
|
-
dir: string;
|
|
27
|
-
/** Maximum UTF-8 cache-key size. Larger keys are treated as non-cacheable. Defaults to 1 MiB. */
|
|
28
|
-
maxKeyBytes?: number;
|
|
29
|
-
/** Maximum serialized result size. Larger entries are treated as non-cacheable. Defaults to 16 MiB. */
|
|
30
|
-
maxEntryBytes?: number;
|
|
31
|
-
/** Optional entry lifetime. Expired entries are treated as cache misses and removed. */
|
|
32
|
-
ttlMs?: number;
|
|
33
|
-
}) => GenerateCache;
|
|
34
|
-
export declare const createCircuitBreakerMiddleware: <TProviderOptions extends ProviderOptions>(options: {
|
|
35
|
-
failureThreshold?: number;
|
|
36
|
-
cooldownMs?: number;
|
|
37
|
-
isFailure?: (error: Error) => boolean;
|
|
38
|
-
/** Best-effort state observer. Observer failures do not alter model outcomes. */
|
|
39
|
-
onStateChange?: (state: CircuitBreakerState & {
|
|
40
|
-
model: LanguageModel<TProviderOptions>;
|
|
41
|
-
status: "open" | "half-open" | "closed";
|
|
42
|
-
}) => void | Promise<void>;
|
|
43
|
-
}) => LanguageModelMiddleware<TProviderOptions>;
|
|
1
|
+
/** Compatibility facade for middleware and the optional file cache backend. */
|
|
2
|
+
export * from "./middleware-runtime.js";
|
|
3
|
+
export { createFileGenerateCache } from "./generate-cache-file.js";
|
|
44
4
|
//# sourceMappingURL=middleware.d.ts.map
|
package/dist/middleware.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|