@plurnk/plurnk-providers 1.3.12 → 1.4.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/.env.defaults +39 -22
- package/README.md +65 -4
- package/SPEC.md +222 -56
- package/dist/AiSdkProvider.d.ts +18 -5
- package/dist/AiSdkProvider.d.ts.map +1 -1
- package/dist/AiSdkProvider.js +240 -153
- package/dist/AiSdkProvider.js.map +1 -1
- package/dist/Mock.d.ts +14 -15
- package/dist/Mock.d.ts.map +1 -1
- package/dist/Mock.js +26 -10
- package/dist/Mock.js.map +1 -1
- package/dist/Pool.d.ts +8 -2
- package/dist/Pool.d.ts.map +1 -1
- package/dist/Pool.js +41 -8
- package/dist/Pool.js.map +1 -1
- package/dist/ProviderRegistry.d.ts +4 -1
- package/dist/ProviderRegistry.d.ts.map +1 -1
- package/dist/ProviderRegistry.js +7 -3
- package/dist/ProviderRegistry.js.map +1 -1
- package/dist/aiSdkTransport.d.ts +4 -2
- package/dist/aiSdkTransport.d.ts.map +1 -1
- package/dist/aiSdkTransport.js +18 -3
- package/dist/aiSdkTransport.js.map +1 -1
- package/dist/catalogProvider.d.ts +3 -1
- package/dist/catalogProvider.d.ts.map +1 -1
- package/dist/catalogProvider.js +20 -7
- package/dist/catalogProvider.js.map +1 -1
- package/dist/compatibleProvider.d.ts.map +1 -1
- package/dist/compatibleProvider.js +11 -4
- package/dist/compatibleProvider.js.map +1 -1
- package/dist/cost.d.ts +11 -0
- package/dist/cost.d.ts.map +1 -0
- package/dist/cost.js +64 -0
- package/dist/cost.js.map +1 -0
- package/dist/discover.d.ts +2 -0
- package/dist/discover.d.ts.map +1 -1
- package/dist/discover.js +15 -9
- package/dist/discover.js.map +1 -1
- package/dist/env.d.ts +4 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +29 -9
- package/dist/env.js.map +1 -1
- package/dist/errors.d.ts +27 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +150 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/notices.d.ts +10 -0
- package/dist/notices.d.ts.map +1 -0
- package/dist/notices.js +11 -0
- package/dist/notices.js.map +1 -0
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +3 -3
- package/dist/ollama.js.map +1 -1
- package/dist/openai.d.ts +1 -1
- package/dist/openai.d.ts.map +1 -1
- package/dist/promptTokens.d.ts +4 -0
- package/dist/promptTokens.d.ts.map +1 -0
- package/dist/promptTokens.js +32 -0
- package/dist/promptTokens.js.map +1 -0
- package/dist/sdkModels.d.ts.map +1 -1
- package/dist/sdkModels.js +4 -3
- package/dist/sdkModels.js.map +1 -1
- package/dist/types.d.ts +43 -16
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/usage.d.ts +3 -0
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +26 -14
- package/dist/usage.js.map +1 -1
- package/dist/warnings.js +0 -0
- package/dist/warnings.js.map +1 -1
- package/package.json +13 -9
- package/src/AiSdkProvider.test.ts +480 -159
- package/src/AiSdkProvider.ts +320 -196
- package/src/Mock.test.ts +29 -14
- package/src/Mock.ts +33 -15
- package/src/Pool.test.ts +43 -6
- package/src/Pool.ts +56 -10
- package/src/ProviderRegistry.test.ts +158 -9
- package/src/ProviderRegistry.ts +19 -6
- package/src/aiSdkTransport.ts +25 -6
- package/src/boundaries.test.ts +8 -3
- package/src/catalogProvider.test.ts +17 -0
- package/src/catalogProvider.ts +25 -10
- package/src/compatibleProvider.test.ts +96 -0
- package/src/compatibleProvider.ts +15 -6
- package/src/cost.test.ts +63 -0
- package/src/cost.ts +83 -0
- package/src/defaults.test.ts +1 -0
- package/src/discover.test.ts +48 -7
- package/src/discover.ts +31 -21
- package/src/env.test.ts +38 -23
- package/src/env.ts +45 -18
- package/src/errors.test.ts +148 -0
- package/src/errors.ts +207 -0
- package/src/index.ts +29 -7
- package/src/lexicon-guard.test.ts +6 -6
- package/src/notices.ts +22 -0
- package/src/ollama.test.ts +64 -0
- package/src/ollama.ts +6 -3
- package/src/openai.ts +3 -0
- package/src/promptTokens.ts +41 -0
- package/src/sdkModels.test.ts +7 -0
- package/src/sdkModels.ts +4 -8
- package/src/types.ts +106 -64
- package/src/usage.test.ts +15 -4
- package/src/usage.ts +32 -14
- package/src/warnings.test.ts +10 -10
- package/src/warnings.ts +0 -0
- package/dist/OpenAICompat.d.ts +0 -76
- package/dist/OpenAICompat.d.ts.map +0 -1
- package/dist/OpenAICompat.js +0 -555
- package/dist/OpenAICompat.js.map +0 -1
- package/dist/openaiStream.d.ts +0 -47
- package/dist/openaiStream.d.ts.map +0 -1
- package/dist/openaiStream.js +0 -280
- package/dist/openaiStream.js.map +0 -1
- package/dist/standardProviders.d.ts +0 -31
- package/dist/standardProviders.d.ts.map +0 -1
- package/dist/standardProviders.js +0 -518
- package/dist/standardProviders.js.map +0 -1
- package/dist/telemetry.d.ts +0 -24
- package/dist/telemetry.d.ts.map +0 -1
- package/dist/telemetry.js +0 -85
- package/dist/telemetry.js.map +0 -1
- package/src/telemetry.test.ts +0 -69
- package/src/telemetry.ts +0 -116
package/dist/openaiStream.js
DELETED
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
// SSE client for OpenAI-compatible /chat/completions. Streaming keeps long
|
|
2
|
-
// completions alive through CDN proxies; the aggregated result is returned as
|
|
3
|
-
// one StreamResponse (the Provider contract is atomic — no partial resolves).
|
|
4
|
-
// Adapted from rummy's proven implementation; previously copy-pasted byte-for-
|
|
5
|
-
// byte into every @plurnk/plurnk-providers-* sibling, now shared from here.
|
|
6
|
-
// Group accumulated encrypted entries into items by wire `id` (id-less entries
|
|
7
|
-
// stand alone, never merged). Order preserved.
|
|
8
|
-
const groupEncrypted = (entries) => {
|
|
9
|
-
const items = [];
|
|
10
|
-
const byId = new Map();
|
|
11
|
-
for (const e of entries) {
|
|
12
|
-
const blob = { data: e.data, format: e.format };
|
|
13
|
-
if (e.id === null) {
|
|
14
|
-
items.push({ id: null, subtype: "message", encrypted: [blob] });
|
|
15
|
-
continue;
|
|
16
|
-
}
|
|
17
|
-
let item = byId.get(e.id);
|
|
18
|
-
if (item === undefined) {
|
|
19
|
-
item = { id: e.id, subtype: "message", encrypted: [] };
|
|
20
|
-
byId.set(e.id, item);
|
|
21
|
-
items.push(item);
|
|
22
|
-
}
|
|
23
|
-
item.encrypted.push(blob);
|
|
24
|
-
}
|
|
25
|
-
return items;
|
|
26
|
-
};
|
|
27
|
-
const encryptedFromDetails = (details) => {
|
|
28
|
-
if (!Array.isArray(details))
|
|
29
|
-
return [];
|
|
30
|
-
const raw = [];
|
|
31
|
-
for (const e of details) {
|
|
32
|
-
const entry = e;
|
|
33
|
-
if (entry?.type !== "reasoning.encrypted" || typeof entry.data !== "string")
|
|
34
|
-
continue;
|
|
35
|
-
raw.push({ id: typeof entry.id === "string" ? entry.id : null, data: entry.data, format: typeof entry.format === "string" ? entry.format : null });
|
|
36
|
-
}
|
|
37
|
-
return groupEncrypted(raw);
|
|
38
|
-
};
|
|
39
|
-
// Map an OpenAI-style `logprobs.content[]` array to the canonical structured view
|
|
40
|
-
// (#36). Reads the RAW `logprob` (not `sampling_logprob`); `top_logprobs` → `top`.
|
|
41
|
-
// Returns null when the shape is absent — never synthesizes.
|
|
42
|
-
const parseLogprobs = (raw) => {
|
|
43
|
-
const content = raw?.content;
|
|
44
|
-
if (!Array.isArray(content))
|
|
45
|
-
return null;
|
|
46
|
-
return content.map((entry) => {
|
|
47
|
-
const { token, logprob, top_logprobs } = entry;
|
|
48
|
-
const top = Array.isArray(top_logprobs)
|
|
49
|
-
? top_logprobs.map((a) => ({ token: a.token, logprob: a.logprob }))
|
|
50
|
-
: undefined;
|
|
51
|
-
return top !== undefined ? { token, logprob, top } : { token, logprob };
|
|
52
|
-
});
|
|
53
|
-
};
|
|
54
|
-
// Cloudflare/CDN EDGE status codes (520-527): infrastructure failures the proxy
|
|
55
|
-
// returns (as HTML error pages), NOT OpenAI/API statuses. A retry re-incurs the
|
|
56
|
-
// same origin wait, so they fail-fast (#543).
|
|
57
|
-
const EDGE_LABELS = new Map([
|
|
58
|
-
[520, "web server returned an unknown error"], [521, "web server is down"],
|
|
59
|
-
[522, "connection timed out"], [523, "origin is unreachable"], [524, "origin timeout"],
|
|
60
|
-
[525, "SSL handshake failed"], [526, "invalid SSL certificate"], [527, "railgun error"],
|
|
61
|
-
]);
|
|
62
|
-
export const isEdgeStatus = (status) => status >= 520 && status <= 527;
|
|
63
|
-
export class OpenAiHttpError extends Error {
|
|
64
|
-
status;
|
|
65
|
-
body;
|
|
66
|
-
retryAfter;
|
|
67
|
-
constructor(status, body, retryAfter) {
|
|
68
|
-
super(OpenAiHttpError.#describe(status, body));
|
|
69
|
-
this.status = status;
|
|
70
|
-
this.body = body;
|
|
71
|
-
this.retryAfter = retryAfter;
|
|
72
|
-
}
|
|
73
|
-
// A non-JSON error body (a proxy/CDN HTML page) collapses to one line and drops
|
|
74
|
-
// the misleading "OpenAI" prefix - an edge code is not an API status (#543).
|
|
75
|
-
// JSON API errors pass through verbatim.
|
|
76
|
-
static #describe(status, body) {
|
|
77
|
-
if (body.trimStart().startsWith("<"))
|
|
78
|
-
return `${status} ${EDGE_LABELS.get(status) ?? "edge/proxy error"}`;
|
|
79
|
-
return `OpenAI ${status} - ${body}`;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
export class StreamIdleError extends Error {
|
|
83
|
-
timeoutMs;
|
|
84
|
-
constructor(timeoutMs) {
|
|
85
|
-
super(`stream received no body bytes for ${timeoutMs}ms`);
|
|
86
|
-
this.name = "StreamIdleError";
|
|
87
|
-
this.timeoutMs = timeoutMs;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const parseRetryAfter = (header) => {
|
|
91
|
-
if (header === null)
|
|
92
|
-
return null;
|
|
93
|
-
const asInt = Number.parseInt(header, 10);
|
|
94
|
-
if (Number.isFinite(asInt))
|
|
95
|
-
return asInt * 1000;
|
|
96
|
-
const asDate = Date.parse(header);
|
|
97
|
-
if (Number.isFinite(asDate))
|
|
98
|
-
return Math.max(0, asDate - Date.now());
|
|
99
|
-
return null;
|
|
100
|
-
};
|
|
101
|
-
// Non-streaming sibling. Same request/error handling, but POSTs without
|
|
102
|
-
// `stream` and parses the single JSON body into the SAME StreamResponse shape.
|
|
103
|
-
// For backends whose STREAMING response misbehaves (e.g. Fireworks labels
|
|
104
|
-
// grammar-constrained output as `reasoning_content` instead of `content`) —
|
|
105
|
-
// the Provider contract is atomic either way, so the transport is free to
|
|
106
|
-
// choose. The fetch timeout (AbortSignal) bounds the wait; there is no proxy
|
|
107
|
-
// between us and the backend that would idle out a non-streamed request.
|
|
108
|
-
export const chatCompletion = async ({ url, headers, body, signal, fetch, captureRawBody }) => {
|
|
109
|
-
const response = await fetch(url, {
|
|
110
|
-
method: "POST",
|
|
111
|
-
headers: { "Content-Type": "application/json", ...headers },
|
|
112
|
-
body: JSON.stringify(body),
|
|
113
|
-
signal,
|
|
114
|
-
});
|
|
115
|
-
if (!response.ok) {
|
|
116
|
-
const errorBody = await response.text();
|
|
117
|
-
throw new OpenAiHttpError(response.status, errorBody, parseRetryAfter(response.headers.get("retry-after")));
|
|
118
|
-
}
|
|
119
|
-
const j = (await response.json());
|
|
120
|
-
const choices = j.choices;
|
|
121
|
-
const choice = (choices?.[0] ?? {});
|
|
122
|
-
const msg = (choice.message ?? {});
|
|
123
|
-
const reasoning = msg.reasoning_content ?? msg.reasoning ?? msg.thinking ?? "";
|
|
124
|
-
const chunkMetadata = {};
|
|
125
|
-
for (const [k, v] of Object.entries(j))
|
|
126
|
-
if (k !== "choices" && k !== "usage")
|
|
127
|
-
chunkMetadata[k] = v;
|
|
128
|
-
return {
|
|
129
|
-
model: typeof j.model === "string" ? j.model : null,
|
|
130
|
-
content: typeof msg.content === "string" ? msg.content : "",
|
|
131
|
-
reasoning_content: typeof reasoning === "string" ? reasoning : "",
|
|
132
|
-
reasoning_encrypted: encryptedFromDetails(msg.reasoning_details),
|
|
133
|
-
finish_reason: typeof choice.finish_reason === "string" ? choice.finish_reason : null,
|
|
134
|
-
usage: (j.usage ?? null),
|
|
135
|
-
chunkMetadata,
|
|
136
|
-
logprobs: parseLogprobs(choice.logprobs),
|
|
137
|
-
// Non-streamed: the parsed JSON IS the verbatim wire body, exact.
|
|
138
|
-
rawBody: captureRawBody === true ? j : undefined,
|
|
139
|
-
};
|
|
140
|
-
};
|
|
141
|
-
export const chatCompletionStream = async ({ url, headers, body, signal, fetch, captureRawBody, streamIdleTimeoutMs }) => {
|
|
142
|
-
const requestBody = { ...body, stream: true, stream_options: { include_usage: true } };
|
|
143
|
-
const response = await fetch(url, {
|
|
144
|
-
method: "POST",
|
|
145
|
-
headers: { "Content-Type": "application/json", ...headers },
|
|
146
|
-
body: JSON.stringify(requestBody),
|
|
147
|
-
signal,
|
|
148
|
-
});
|
|
149
|
-
if (!response.ok) {
|
|
150
|
-
const errorBody = await response.text();
|
|
151
|
-
throw new OpenAiHttpError(response.status, errorBody, parseRetryAfter(response.headers.get("retry-after")));
|
|
152
|
-
}
|
|
153
|
-
if (response.body === null)
|
|
154
|
-
throw new Error("OpenAI response body is null");
|
|
155
|
-
const reader = response.body.getReader();
|
|
156
|
-
const decoder = new TextDecoder();
|
|
157
|
-
let buffer = "";
|
|
158
|
-
let content = "";
|
|
159
|
-
let reasoning_content = "";
|
|
160
|
-
let usage = null;
|
|
161
|
-
let model = null;
|
|
162
|
-
let finish_reason = null;
|
|
163
|
-
const chunkMetadata = {};
|
|
164
|
-
// #36: logprobs stream as per-chunk choices[0].logprobs.content[] deltas —
|
|
165
|
-
// accumulate the raw entries across chunks, map once at the end.
|
|
166
|
-
const logprobEntries = [];
|
|
167
|
-
// #482: encrypted reasoning_details stream chunked — concatenate `data` per
|
|
168
|
-
// reassembly key (index when present, else id, else a counter); the id/format
|
|
169
|
-
// ride along and items group by id at the end.
|
|
170
|
-
const encryptedByKey = new Map();
|
|
171
|
-
let encryptedNoKey = 0;
|
|
172
|
-
while (true) {
|
|
173
|
-
const read = reader.read();
|
|
174
|
-
let timer;
|
|
175
|
-
const idle = streamIdleTimeoutMs !== undefined && streamIdleTimeoutMs > 0
|
|
176
|
-
? new Promise((_resolve, reject) => {
|
|
177
|
-
timer = setTimeout(() => reject(new StreamIdleError(streamIdleTimeoutMs)), streamIdleTimeoutMs);
|
|
178
|
-
})
|
|
179
|
-
: null;
|
|
180
|
-
let result;
|
|
181
|
-
try {
|
|
182
|
-
result = idle === null ? await read : await Promise.race([read, idle]);
|
|
183
|
-
}
|
|
184
|
-
catch (err) {
|
|
185
|
-
if (err instanceof StreamIdleError)
|
|
186
|
-
void reader.cancel(err).catch(() => undefined);
|
|
187
|
-
throw err;
|
|
188
|
-
}
|
|
189
|
-
finally {
|
|
190
|
-
if (timer !== undefined)
|
|
191
|
-
clearTimeout(timer);
|
|
192
|
-
}
|
|
193
|
-
const { done, value } = result;
|
|
194
|
-
if (done)
|
|
195
|
-
break;
|
|
196
|
-
buffer += decoder.decode(value, { stream: true });
|
|
197
|
-
const lines = buffer.split("\n");
|
|
198
|
-
buffer = lines.pop() ?? "";
|
|
199
|
-
for (const rawLine of lines) {
|
|
200
|
-
const line = rawLine.trim();
|
|
201
|
-
if (!line.startsWith("data:"))
|
|
202
|
-
continue;
|
|
203
|
-
const payload = line.slice(5).trimStart();
|
|
204
|
-
if (payload === "[DONE]" || payload === "")
|
|
205
|
-
continue;
|
|
206
|
-
let chunk;
|
|
207
|
-
try {
|
|
208
|
-
chunk = JSON.parse(payload);
|
|
209
|
-
}
|
|
210
|
-
catch {
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
// A streaming server may flush HTTP 200 headers before inference
|
|
214
|
-
// completes, then report a terminal failure as an SSE error frame.
|
|
215
|
-
// That frame is a failed exchange, never an empty completion.
|
|
216
|
-
if (chunk.error !== null && typeof chunk.error === "object") {
|
|
217
|
-
const status = typeof chunk.status === "number"
|
|
218
|
-
&& Number.isInteger(chunk.status)
|
|
219
|
-
&& chunk.status >= 400
|
|
220
|
-
&& chunk.status <= 599
|
|
221
|
-
? chunk.status
|
|
222
|
-
: 500;
|
|
223
|
-
throw new OpenAiHttpError(status, JSON.stringify({ error: chunk.error }), null);
|
|
224
|
-
}
|
|
225
|
-
if (typeof chunk.model === "string")
|
|
226
|
-
model = chunk.model;
|
|
227
|
-
if (chunk.usage !== undefined && chunk.usage !== null)
|
|
228
|
-
usage = chunk.usage;
|
|
229
|
-
for (const [k, v] of Object.entries(chunk)) {
|
|
230
|
-
if (k === "choices" || k === "usage")
|
|
231
|
-
continue;
|
|
232
|
-
chunkMetadata[k] = v;
|
|
233
|
-
}
|
|
234
|
-
const choices = chunk.choices;
|
|
235
|
-
const choice = choices?.[0];
|
|
236
|
-
if (choice === undefined)
|
|
237
|
-
continue;
|
|
238
|
-
if (typeof choice.finish_reason === "string")
|
|
239
|
-
finish_reason = choice.finish_reason;
|
|
240
|
-
const chunkLogprobs = choice.logprobs?.content;
|
|
241
|
-
if (Array.isArray(chunkLogprobs))
|
|
242
|
-
logprobEntries.push(...chunkLogprobs);
|
|
243
|
-
const delta = choice.delta;
|
|
244
|
-
if (delta === undefined)
|
|
245
|
-
continue;
|
|
246
|
-
if (typeof delta.content === "string")
|
|
247
|
-
content += delta.content;
|
|
248
|
-
// Reasoning surfaces under different field names per provider.
|
|
249
|
-
if (typeof delta.reasoning_content === "string")
|
|
250
|
-
reasoning_content += delta.reasoning_content;
|
|
251
|
-
if (typeof delta.reasoning === "string")
|
|
252
|
-
reasoning_content += delta.reasoning;
|
|
253
|
-
if (typeof delta.thinking === "string")
|
|
254
|
-
reasoning_content += delta.thinking;
|
|
255
|
-
if (Array.isArray(delta.reasoning_details)) {
|
|
256
|
-
for (const e of delta.reasoning_details) {
|
|
257
|
-
const entry = e;
|
|
258
|
-
if (entry?.type !== "reasoning.encrypted" || typeof entry.data !== "string")
|
|
259
|
-
continue;
|
|
260
|
-
const id = typeof entry.id === "string" ? entry.id : null;
|
|
261
|
-
const key = typeof entry.index === "number" ? `i${entry.index}` : id ?? `n${encryptedNoKey++}`;
|
|
262
|
-
const prev = encryptedByKey.get(key);
|
|
263
|
-
if (prev !== undefined)
|
|
264
|
-
prev.data += entry.data;
|
|
265
|
-
else
|
|
266
|
-
encryptedByKey.set(key, { id, data: entry.data, format: typeof entry.format === "string" ? entry.format : null });
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
const logprobs = logprobEntries.length > 0 ? parseLogprobs({ content: logprobEntries }) : null;
|
|
272
|
-
// Streamed turns have no single verbatim wire body; reassemble the equivalent
|
|
273
|
-
// (#36) — chunk-level fields (chunkMetadata) + the collected choice — only when
|
|
274
|
-
// asked, so serving turns pay nothing.
|
|
275
|
-
const rawBody = captureRawBody === true
|
|
276
|
-
? { ...chunkMetadata, model, usage, choices: [{ index: 0, message: { content, reasoning_content }, finish_reason, logprobs: logprobs !== null ? { content: logprobEntries } : null }] }
|
|
277
|
-
: undefined;
|
|
278
|
-
return { model, content, reasoning_content, reasoning_encrypted: groupEncrypted(encryptedByKey.values()), finish_reason, usage, chunkMetadata, logprobs, rawBody };
|
|
279
|
-
};
|
|
280
|
-
//# sourceMappingURL=openaiStream.js.map
|
package/dist/openaiStream.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openaiStream.js","sourceRoot":"","sources":["../src/openaiStream.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAqC5E,+EAA+E;AAC/E,+CAA+C;AAC/C,MAAM,cAAc,GAAG,CAAC,OAA+B,EAA4B,EAAE;IACjF,MAAM,KAAK,GAA6B,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAChD,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACjG,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC3H,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAA4B,EAAE;IACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAuE,CAAC;QACtF,IAAI,KAAK,EAAE,IAAI,KAAK,qBAAqB,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACtF,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvJ,CAAC;IACD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC,CAAC;AAkBF,kFAAkF;AAClF,mFAAmF;AACnF,6DAA6D;AAC7D,MAAM,aAAa,GAAG,CAAC,GAAY,EAAyB,EAAE;IAC1D,MAAM,OAAO,GAAI,GAAgD,EAAE,OAAO,CAAC;IAC3E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,KAAmE,CAAC;QAC7G,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAG,CAAkB,CAAC,KAAK,EAAE,OAAO,EAAG,CAAkB,CAAC,OAAO,EAAE,CAAC,CAAC;YACvG,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gFAAgF;AAChF,gFAAgF;AAChF,8CAA8C;AAC9C,MAAM,WAAW,GAAgC,IAAI,GAAG,CAAC;IACrD,CAAC,GAAG,EAAE,sCAAsC,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,CAAC;IAC1E,CAAC,GAAG,EAAE,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,CAAC;IACtF,CAAC,GAAG,EAAE,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC;CAC1F,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC;AAExF,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC7B,MAAM,CAAS;IACf,IAAI,CAAS;IACb,UAAU,CAAgB;IACnC,YAAY,MAAc,EAAE,IAAY,EAAE,UAAyB;QAC/D,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IACD,gFAAgF;IAChF,6EAA6E;IAC7E,yCAAyC;IACzC,MAAM,CAAC,SAAS,CAAC,MAAc,EAAE,IAAY;QACzC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;QAC1G,OAAO,UAAU,MAAM,MAAM,IAAI,EAAE,CAAC;IACxC,CAAC;CACJ;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC7B,SAAS,CAAS;IAC3B,YAAY,SAAiB;QACzB,KAAK,CAAC,qCAAqC,SAAS,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,eAAe,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAC7D,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,GAAG,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,wEAAwE;AACxE,+EAA+E;AAC/E,0EAA0E;AAC1E,4EAA4E;AAC5E,0EAA0E;AAC1E,6EAA6E;AAC7E,yEAAyE;AACzE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAiB,EAA2B,EAAE;IAClI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC9B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE;QAC3D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1B,MAAM;KACT,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;IAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,OAAqD,CAAC;IACxE,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;IAC/D,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,iBAAiB,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC/E,MAAM,aAAa,GAA4B,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO;YAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnG,OAAO;QACH,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QACnD,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAC3D,iBAAiB,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QACjE,mBAAmB,EAAE,oBAAoB,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAChE,aAAa,EAAE,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;QACrF,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAA4B;QACnD,aAAa;QACb,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,kEAAkE;QAClE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;KACnD,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAiB,EAA2B,EAAE;IAC7J,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC;IAEvF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC9B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE;QAC3D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QACjC,MAAM;KACT,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAChH,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAElC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAC3B,IAAI,KAAK,GAA4B,IAAI,CAAC;IAC1C,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,MAAM,aAAa,GAA4B,EAAE,CAAC;IAClD,2EAA2E;IAC3E,iEAAiE;IACjE,MAAM,cAAc,GAAc,EAAE,CAAC;IACrC,4EAA4E;IAC5E,8EAA8E;IAC9E,+CAA+C;IAC/C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAwB,CAAC;IACvD,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,KAAgD,CAAC;QACrD,MAAM,IAAI,GAAG,mBAAmB,KAAK,SAAS,IAAI,mBAAmB,GAAG,CAAC;YACrE,CAAC,CAAC,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;gBACtC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YACpG,CAAC,CAAC;YACF,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,MAA+C,CAAC;QACpD,IAAI,CAAC;YACD,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,YAAY,eAAe;gBAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnF,MAAM,GAAG,CAAC;QACd,CAAC;gBAAS,CAAC;YACP,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QAC/B,IAAI,IAAI;YAAE,MAAM;QAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAE3B,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,SAAS;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE;gBAAE,SAAS;YAErD,IAAI,KAA8B,CAAC;YACnC,IAAI,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEnF,iEAAiE;YACjE,mEAAmE;YACnE,8DAA8D;YAC9D,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC1D,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;uBACxC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;uBAC9B,KAAK,CAAC,MAAM,IAAI,GAAG;uBACnB,KAAK,CAAC,MAAM,IAAI,GAAG;oBACtB,CAAC,CAAC,KAAK,CAAC,MAAM;oBACd,CAAC,CAAC,GAAG,CAAC;gBACV,MAAM,IAAI,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACpF,CAAC;YAED,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACzD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI;gBAAE,KAAK,GAAG,KAAK,CAAC,KAAgC,CAAC;YAEtG,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO;oBAAE,SAAS;gBAC/C,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAqD,CAAC;YAC5E,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;gBAAE,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAEnF,MAAM,aAAa,GAAI,MAAM,CAAC,QAA8C,EAAE,OAAO,CAAC;YACtF,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;gBAAE,cAAc,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;YAExE,MAAM,KAAK,GAAG,MAAM,CAAC,KAA4C,CAAC;YAClE,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBAAE,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;YAChE,+DAA+D;YAC/D,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ;gBAAE,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,CAAC;YAC9F,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;gBAAE,iBAAiB,IAAI,KAAK,CAAC,SAAS,CAAC;YAC9E,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;gBAAE,iBAAiB,IAAI,KAAK,CAAC,QAAQ,CAAC;YAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACzC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,CAAwF,CAAC;oBACvG,IAAI,KAAK,EAAE,IAAI,KAAK,qBAAqB,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;wBAAE,SAAS;oBACtF,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC1D,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,cAAc,EAAE,EAAE,CAAC;oBAC/F,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACrC,IAAI,IAAI,KAAK,SAAS;wBAAE,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;;wBAC3C,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC3H,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,8EAA8E;IAC9E,gFAAgF;IAChF,uCAAuC;IACvC,MAAM,OAAO,GAAG,cAAc,KAAK,IAAI;QACnC,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;QACvL,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,cAAc,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACvK,CAAC,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { Provider } from "./types.ts";
|
|
2
|
-
import { type ReasoningStyle } from "./OpenAICompat.ts";
|
|
3
|
-
type StandardProviderSpec = {
|
|
4
|
-
apiKeyVar?: string | readonly string[];
|
|
5
|
-
apiKeyRequired?: boolean;
|
|
6
|
-
apiKeyMessage?: string;
|
|
7
|
-
apiKeyRejectedMessage?: string;
|
|
8
|
-
headersFromEnv?: (env: NodeJS.ProcessEnv) => Record<string, string>;
|
|
9
|
-
baseUrlVar?: string | readonly string[];
|
|
10
|
-
baseUrlFromEnv?: (env: NodeJS.ProcessEnv) => string | undefined;
|
|
11
|
-
catalogContextLookup?: (model: string) => number | undefined;
|
|
12
|
-
chatPath: string;
|
|
13
|
-
flexBaseStrip?: boolean;
|
|
14
|
-
reasoningStyle: ReasoningStyle;
|
|
15
|
-
streaming?: boolean;
|
|
16
|
-
modelPrefix?: string;
|
|
17
|
-
qualifiedModelPrefix?: string;
|
|
18
|
-
serviceTiers?: readonly string[];
|
|
19
|
-
firstPartyMetadata?: boolean;
|
|
20
|
-
suppressTuningFloors?: boolean;
|
|
21
|
-
suppressFrequencyPenalty?: boolean;
|
|
22
|
-
promptCacheKey?: boolean;
|
|
23
|
-
tokenizerEnvVar: string;
|
|
24
|
-
probeNctx?: boolean;
|
|
25
|
-
detectLlamaServer?: boolean;
|
|
26
|
-
};
|
|
27
|
-
export declare const STANDARD_PROVIDERS: Readonly<Record<string, StandardProviderSpec>>;
|
|
28
|
-
export declare const isStandardProvider: (name: string) => boolean;
|
|
29
|
-
export declare const standardProviderFromEnv: (name: string, env: NodeJS.ProcessEnv, model: string, baseUrlOverride?: string) => Promise<Provider | null>;
|
|
30
|
-
export {};
|
|
31
|
-
//# sourceMappingURL=standardProviders.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"standardProviders.d.ts","sourceRoot":"","sources":["../src/standardProviders.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAC1D,OAA6B,EAAE,KAAK,cAAc,EAAqB,MAAM,mBAAmB,CAAC;AAOjG,KAAK,oBAAoB,GAAG;IAOxB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IAIzB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAK/B,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAKpE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IAIxC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,MAAM,GAAG,SAAS,CAAC;IAKhE,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAE7D,QAAQ,EAAE,MAAM,CAAC;IAIjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,cAAc,CAAC;IAE/B,SAAS,CAAC,EAAE,OAAO,CAAC;IAKpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAOjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAG7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAK/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAInC,cAAc,CAAC,EAAE,OAAO,CAAC;IAIzB,eAAe,EAAE,MAAM,CAAC;IAOxB,SAAS,CAAC,EAAE,OAAO,CAAC;IAQpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAGF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAkL5E,CAAC;AAEH,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,OAAqC,CAAC;AAoHxF,eAAO,MAAM,uBAAuB,SAAgB,MAAM,OAAO,MAAM,CAAC,UAAU,SAAS,MAAM,oBAAoB,MAAM,KAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CA0NpJ,CAAC"}
|