@zhivex-ai/vertex 1.0.2 → 1.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/README.md +995 -10
- package/dist/anthropic.d.ts +9 -0
- package/dist/anthropic.d.ts.map +1 -1
- package/dist/anthropic.js +86 -16
- package/dist/anthropic.js.map +1 -1
- package/dist/capabilities.d.ts +1 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +12 -3
- package/dist/capabilities.js.map +1 -1
- package/dist/chat-profiles.d.ts +8 -0
- package/dist/chat-profiles.d.ts.map +1 -0
- package/dist/chat-profiles.js +61 -0
- package/dist/chat-profiles.js.map +1 -0
- package/dist/chat.d.ts +10 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +120 -0
- package/dist/chat.js.map +1 -0
- package/dist/embeddings.d.ts +71 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +166 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/endpoints.d.ts +76 -0
- package/dist/endpoints.d.ts.map +1 -0
- package/dist/endpoints.js +152 -0
- package/dist/endpoints.js.map +1 -0
- package/dist/grpc.d.ts +33 -0
- package/dist/grpc.d.ts.map +1 -0
- package/dist/grpc.js +161 -0
- package/dist/grpc.js.map +1 -0
- package/dist/index.d.ts +40 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +653 -292
- package/dist/index.js.map +1 -1
- package/dist/inline-thinking.d.ts +3 -0
- package/dist/inline-thinking.d.ts.map +1 -0
- package/dist/inline-thinking.js +106 -0
- package/dist/inline-thinking.js.map +1 -0
- package/dist/interactions.d.ts +21 -0
- package/dist/interactions.d.ts.map +1 -0
- package/dist/interactions.js +240 -0
- package/dist/interactions.js.map +1 -0
- package/dist/multimodal-embeddings.d.ts +53 -0
- package/dist/multimodal-embeddings.d.ts.map +1 -0
- package/dist/multimodal-embeddings.js +135 -0
- package/dist/multimodal-embeddings.js.map +1 -0
- package/dist/responses.d.ts +3 -0
- package/dist/responses.d.ts.map +1 -0
- package/dist/responses.js +120 -0
- package/dist/responses.js.map +1 -0
- package/dist/specialized.d.ts +14 -0
- package/dist/specialized.d.ts.map +1 -0
- package/dist/specialized.js +117 -0
- package/dist/specialized.js.map +1 -0
- package/dist/tensors.d.ts +22 -0
- package/dist/tensors.d.ts.map +1 -0
- package/dist/tensors.js +49 -0
- package/dist/tensors.js.map +1 -0
- package/dist/token-counting.d.ts +37 -0
- package/dist/token-counting.d.ts.map +1 -0
- package/dist/token-counting.js +33 -0
- package/dist/token-counting.js.map +1 -0
- package/dist/transcription.d.ts +60 -0
- package/dist/transcription.d.ts.map +1 -0
- package/dist/transcription.js +88 -0
- package/dist/transcription.js.map +1 -0
- package/dist/virtual-try-on.d.ts +23 -0
- package/dist/virtual-try-on.d.ts.map +1 -0
- package/dist/virtual-try-on.js +80 -0
- package/dist/virtual-try-on.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { toJSONSchema } from "zod";
|
|
2
|
+
import { ConfigurationError, ProviderHTTPError, UnsupportedFeatureError, isCallableToolDefinition, toToolSet, readJsonWithLimit, readErrorBodyWithLimit, streamSSE, withRetry, withTimeoutSignal } from "@zhivex-ai/core/provider";
|
|
3
|
+
const normalize = (json) => {
|
|
4
|
+
const outputs = json.outputs ?? (json.steps ?? [])
|
|
5
|
+
.filter((value) => value.type === "model_output")
|
|
6
|
+
.flatMap((value) => value.content ?? []);
|
|
7
|
+
return {
|
|
8
|
+
id: json.id ?? json.name ?? "", name: json.name, model: json.model, agent: json.agent,
|
|
9
|
+
status: json.status, object: json.object, createTime: json.created, updateTime: json.updated,
|
|
10
|
+
previousInteractionId: json.previous_interaction_id, steps: json.steps, outputs,
|
|
11
|
+
outputText: outputs.filter((value) => value.type === "text").map((value) => value.text ?? "").join("") || undefined,
|
|
12
|
+
outputAudio: outputs.find((value) => value.type === "audio"),
|
|
13
|
+
outputImage: outputs.find((value) => value.type === "image"),
|
|
14
|
+
outputVideo: outputs.find((value) => value.type === "video"),
|
|
15
|
+
usage: json.usage ? { inputTokens: json.usage.total_input_tokens, outputTokens: json.usage.total_output_tokens,
|
|
16
|
+
totalTokens: json.usage.total_tokens, cachedInputTokens: json.usage.total_cached_tokens,
|
|
17
|
+
reasoningTokens: json.usage.total_thought_tokens } : undefined,
|
|
18
|
+
error: json.error, rawResponse: json, providerMetadata: json
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
// Each resumed request reconstructs local aggregation; prior outputs are not emitted.
|
|
22
|
+
const toolAccumulator = () => {
|
|
23
|
+
const calls = new Map();
|
|
24
|
+
const callIds = new Set();
|
|
25
|
+
const callIndices = new Set();
|
|
26
|
+
return {
|
|
27
|
+
pending: () => calls.size,
|
|
28
|
+
consume(data, type) {
|
|
29
|
+
if (type === "step.start" && data.step?.type === "function_call") {
|
|
30
|
+
if (callIds.size >= 128 || !Number.isInteger(data.index) || data.index < 0 || callIndices.has(data.index)
|
|
31
|
+
|| typeof data.step.id !== "string" || !data.step.id || callIds.has(data.step.id)
|
|
32
|
+
|| typeof data.step.name !== "string" || !data.step.name)
|
|
33
|
+
throw new ConfigurationError("Invalid or duplicate Vertex interaction tool call.");
|
|
34
|
+
callIds.add(data.step.id);
|
|
35
|
+
callIndices.add(data.index);
|
|
36
|
+
calls.set(data.index, { id: data.step.id, name: data.step.name, args: data.step.arguments, partial: "" });
|
|
37
|
+
}
|
|
38
|
+
if (type === "step.delta" && ["arguments_delta", "arguments"].includes(data.delta?.type)) {
|
|
39
|
+
const call = calls.get(data.index);
|
|
40
|
+
if (!call || typeof data.delta.partial_arguments !== "string")
|
|
41
|
+
throw new ConfigurationError("Invalid Vertex interaction tool arguments.");
|
|
42
|
+
call.partial += data.delta.partial_arguments;
|
|
43
|
+
if (call.partial.length > 1024 * 1024)
|
|
44
|
+
throw new ConfigurationError("Vertex interaction tool arguments exceeded limit.");
|
|
45
|
+
}
|
|
46
|
+
if (type === "step.stop" && calls.has(data.index)) {
|
|
47
|
+
const call = calls.get(data.index);
|
|
48
|
+
let args = call.args;
|
|
49
|
+
if (call.partial) {
|
|
50
|
+
try {
|
|
51
|
+
args = JSON.parse(call.partial);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
throw new ConfigurationError("Invalid JSON in Vertex interaction tool arguments.");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (!args || typeof args !== "object" || Array.isArray(args))
|
|
58
|
+
throw new ConfigurationError("Vertex interaction tool arguments must be an object.");
|
|
59
|
+
calls.delete(data.index);
|
|
60
|
+
return { type: "tool-call", toolCall: { id: call.id, name: call.name, input: args } };
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
/** Vertex's project-scoped Interactions HTTP API; unrelated to prediction operations. */
|
|
67
|
+
export const createVertexInteractionsClient = (baseURL, fetcher, assertAccess) => {
|
|
68
|
+
const collection = `${baseURL.replace(/\/v1(?:beta1)?\//, "/v1beta1/")}/interactions`;
|
|
69
|
+
const resource = (id) => {
|
|
70
|
+
if (!id || /[\\/?#\s]/.test(id) || id === "." || id === "..")
|
|
71
|
+
throw new ConfigurationError("Invalid Vertex interaction ID.");
|
|
72
|
+
return `${collection}/${encodeURIComponent(id)}`;
|
|
73
|
+
};
|
|
74
|
+
const body = (input, stream) => {
|
|
75
|
+
if (Boolean(input.modelId) === Boolean(input.agent))
|
|
76
|
+
throw new ConfigurationError("Vertex Interactions requires exactly one modelId or agent.");
|
|
77
|
+
if (input.modelId === "lyria-3-clip-preview" && input.store === true) {
|
|
78
|
+
throw new UnsupportedFeatureError("Vertex Lyria 3 Clip requires store: false; stored interaction retrieval/resumption is unavailable on this route.");
|
|
79
|
+
}
|
|
80
|
+
if (input.modelId && /^(lyria-3|gemini-omni)/.test(input.modelId) && !baseURL.endsWith("/locations/global")) {
|
|
81
|
+
throw new ConfigurationError("Vertex Interactions media models require location global.");
|
|
82
|
+
}
|
|
83
|
+
const tools = input.tools ? Object.values(toToolSet(input.tools) ?? {}).map((tool) => {
|
|
84
|
+
if (isCallableToolDefinition(tool))
|
|
85
|
+
return { type: "function", name: tool.name, description: tool.description, parameters: toJSONSchema(tool.schema) };
|
|
86
|
+
if (tool.provider && tool.provider !== "vertex")
|
|
87
|
+
throw new UnsupportedFeatureError("Vertex Interactions cannot use another provider's hosted tools.");
|
|
88
|
+
const aliases = { googleSearch: "google_search", googleMaps: "google_maps", urlContext: "url_context", codeExecution: "code_execution", computerUse: "computer_use", vertexSearch: "retrieval" };
|
|
89
|
+
const type = aliases[tool.type] ?? tool.type;
|
|
90
|
+
if (!["google_search", "google_maps", "url_context", "code_execution", "computer_use", "mcp_server", "retrieval"].includes(type))
|
|
91
|
+
throw new UnsupportedFeatureError(`Vertex Interactions does not expose hosted tool "${tool.type}"; use its documented native tool contract.`);
|
|
92
|
+
const config = { ...(tool.config && typeof tool.config === "object" && !Array.isArray(tool.config) ? tool.config : {}) };
|
|
93
|
+
if (type === "google_maps" && config.enableWidget !== undefined) {
|
|
94
|
+
if (config.enable_widget !== undefined)
|
|
95
|
+
throw new ConfigurationError("Specify only one Google Maps widget option.");
|
|
96
|
+
config.enable_widget = config.enableWidget;
|
|
97
|
+
delete config.enableWidget;
|
|
98
|
+
}
|
|
99
|
+
if (tool.type === "vertexSearch")
|
|
100
|
+
return { type, retrieval_types: ["vertex_ai_search"], vertex_ai_search_config: config };
|
|
101
|
+
return { ...config, type };
|
|
102
|
+
}) : undefined;
|
|
103
|
+
return { ...input.providerOptions, model: input.modelId, agent: input.agent, input: input.input,
|
|
104
|
+
...(tools ? { tools } : {}), previous_interaction_id: input.previousInteractionId,
|
|
105
|
+
system_instruction: input.systemInstruction, response_format: input.responseFormat,
|
|
106
|
+
generation_config: input.generationConfig, agent_config: input.agentConfig,
|
|
107
|
+
environment: input.environment, labels: input.labels, background: input.background,
|
|
108
|
+
store: input.store ?? (input.modelId === "lyria-3-clip-preview" ? false : undefined), stream };
|
|
109
|
+
};
|
|
110
|
+
const request = async (url, init, signal, input) => {
|
|
111
|
+
assertAccess();
|
|
112
|
+
return withRetry(async () => {
|
|
113
|
+
const response = await fetcher(url, { ...init, redirect: "error", signal,
|
|
114
|
+
headers: { "content-type": "application/json", "Api-Revision": "2026-05-20", ...init.headers } });
|
|
115
|
+
if (!response.ok)
|
|
116
|
+
throw new ProviderHTTPError(`Vertex Interactions failed with status ${response.status}.`, response.status, { responseBody: await readErrorBodyWithLimit(response) });
|
|
117
|
+
return response;
|
|
118
|
+
}, { ...input, abortSignal: signal });
|
|
119
|
+
};
|
|
120
|
+
const json = async (url, init, input) => {
|
|
121
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
122
|
+
try {
|
|
123
|
+
return await readJsonWithLimit(await request(url, init, signal, input), { maxBytes: 128 * 1024 * 1024 });
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
cleanup();
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const stream = async (input) => {
|
|
130
|
+
const tools = toolAccumulator();
|
|
131
|
+
if ("id" in input && input.previousEvents !== undefined) {
|
|
132
|
+
let serialized;
|
|
133
|
+
try {
|
|
134
|
+
serialized = JSON.stringify(input.previousEvents);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
throw new ConfigurationError("Interaction resume history must be JSON serializable.");
|
|
138
|
+
}
|
|
139
|
+
const history = JSON.parse(serialized);
|
|
140
|
+
if (!Array.isArray(history) || !history.length || history.length > 16_384
|
|
141
|
+
|| !input.lastEventId || new TextEncoder().encode(serialized).byteLength > 8 * 1024 * 1024) {
|
|
142
|
+
throw new ConfigurationError("Interaction resume history requires a cursor and 1-16384 events within 8 MiB.");
|
|
143
|
+
}
|
|
144
|
+
for (const event of history) {
|
|
145
|
+
if (!event || typeof event !== "object" || Array.isArray(event) || typeof event.event_type !== "string")
|
|
146
|
+
throw new ConfigurationError("Invalid interaction resume event.");
|
|
147
|
+
const interaction = event.interaction;
|
|
148
|
+
if ((interaction?.id !== undefined && interaction.id !== input.id)
|
|
149
|
+
|| (event.interaction_id !== undefined && event.interaction_id !== input.id))
|
|
150
|
+
throw new ConfigurationError("Interaction resume history belongs to another interaction.");
|
|
151
|
+
tools.consume(event, event.event_type);
|
|
152
|
+
}
|
|
153
|
+
if (history.at(-1)?.event_id !== input.lastEventId)
|
|
154
|
+
throw new ConfigurationError("Interaction resume history does not match lastEventId.");
|
|
155
|
+
}
|
|
156
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
157
|
+
let response;
|
|
158
|
+
try {
|
|
159
|
+
const url = new URL("id" in input ? resource(input.id) : collection);
|
|
160
|
+
if ("id" in input) {
|
|
161
|
+
url.searchParams.set("stream", "true");
|
|
162
|
+
if (input.lastEventId)
|
|
163
|
+
url.searchParams.set("last_event_id", input.lastEventId);
|
|
164
|
+
}
|
|
165
|
+
response = await request(url.toString(), "id" in input ? { method: "GET" } : { method: "POST", body: JSON.stringify(body(input, true)) }, signal, input);
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
cleanup();
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
return (async function* () {
|
|
172
|
+
let finished = false;
|
|
173
|
+
try {
|
|
174
|
+
for await (const event of streamSSE(response)) {
|
|
175
|
+
if (event.data === "[DONE]")
|
|
176
|
+
continue;
|
|
177
|
+
const data = JSON.parse(event.data);
|
|
178
|
+
const type = data.event_type ?? data.type ?? event.event;
|
|
179
|
+
if (type === "error")
|
|
180
|
+
throw new ProviderHTTPError("Vertex Interactions stream failed.", 500, { responseBody: event.data });
|
|
181
|
+
yield { type: "provider-data", provider: "vertex", data: { ...data, event_type: type } };
|
|
182
|
+
const toolEvent = tools.consume(data, type);
|
|
183
|
+
if (toolEvent)
|
|
184
|
+
yield toolEvent;
|
|
185
|
+
if (type === "step.delta" && data.delta?.type === "text" && typeof data.delta.text === "string")
|
|
186
|
+
yield { type: "text-delta", textDelta: data.delta.text };
|
|
187
|
+
if (type === "step.start")
|
|
188
|
+
for (const content of data.step?.content ?? []) {
|
|
189
|
+
if (content.type === "text" && typeof content.text === "string")
|
|
190
|
+
yield { type: "text-delta", textDelta: content.text };
|
|
191
|
+
}
|
|
192
|
+
const status = data.interaction?.status ?? data.status ?? (typeof type === "string" && type.startsWith("interaction.") ? type.slice("interaction.".length) : undefined);
|
|
193
|
+
if (!finished && ["completed", "requires_action", "failed", "cancelled", "incomplete", "budget_exceeded"].includes(status)) {
|
|
194
|
+
if (tools.pending())
|
|
195
|
+
throw new ConfigurationError("Vertex interaction ended with incomplete tool calls.");
|
|
196
|
+
finished = true;
|
|
197
|
+
yield { type: "finish", finishReason: status === "completed" ? "stop" : status === "requires_action" ? "tool-calls" : ["incomplete", "budget_exceeded"].includes(status) ? "length" : "error", providerFinishReason: status,
|
|
198
|
+
usage: normalize(data.interaction ?? data).usage };
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (!finished)
|
|
203
|
+
throw new ConfigurationError("Vertex interaction stream ended without a terminal event; resume with the last event ID.");
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
await response.body?.cancel().catch(() => { });
|
|
207
|
+
cleanup();
|
|
208
|
+
}
|
|
209
|
+
})();
|
|
210
|
+
};
|
|
211
|
+
return {
|
|
212
|
+
create: async (input) => normalize(await json(collection, { method: "POST", body: JSON.stringify(body(input, false)) }, input)),
|
|
213
|
+
get: async (input) => normalize(await json(resource(input.id), { method: "GET" }, input)),
|
|
214
|
+
cancel: async (input) => normalize(await json(`${resource(input.id)}/cancel`, { method: "POST" }, input)),
|
|
215
|
+
async delete(input) {
|
|
216
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
217
|
+
try {
|
|
218
|
+
const response = await request(resource(input.id), { method: "DELETE" }, signal, input);
|
|
219
|
+
await response.body?.cancel();
|
|
220
|
+
return { id: input.id };
|
|
221
|
+
}
|
|
222
|
+
finally {
|
|
223
|
+
cleanup();
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
async list(input = {}) {
|
|
227
|
+
if (input.pageSize !== undefined && (!Number.isInteger(input.pageSize) || input.pageSize < 1 || input.pageSize > 500))
|
|
228
|
+
throw new ConfigurationError("Vertex interaction pageSize must be 1-500.");
|
|
229
|
+
const url = new URL(collection);
|
|
230
|
+
if (input.pageSize)
|
|
231
|
+
url.searchParams.set("page_size", String(input.pageSize));
|
|
232
|
+
if (input.pageToken)
|
|
233
|
+
url.searchParams.set("page_token", input.pageToken);
|
|
234
|
+
const result = await json(url.toString(), { method: "GET" }, input);
|
|
235
|
+
return { interactions: result.interaction_metadatas ?? [], nextPageToken: result.next_page_token, rawResponse: result };
|
|
236
|
+
},
|
|
237
|
+
stream, resume: stream
|
|
238
|
+
};
|
|
239
|
+
};
|
|
240
|
+
//# sourceMappingURL=interactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactions.js","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type EmbeddingModel, type EmbedInput, type EmbedResult, type MediaInput, type RetryOptions } from "@zhivex-ai/core/provider";
|
|
2
|
+
export interface VertexVideoSegmentConfig {
|
|
3
|
+
startOffsetSec?: number;
|
|
4
|
+
endOffsetSec?: number;
|
|
5
|
+
intervalSec?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface VertexMultimodalEmbeddingInput extends RetryOptions {
|
|
8
|
+
text?: string;
|
|
9
|
+
image?: MediaInput;
|
|
10
|
+
video?: MediaInput;
|
|
11
|
+
videoSegmentConfig?: VertexVideoSegmentConfig;
|
|
12
|
+
/** Text/image-only requests. Requests containing video use the default 1408 dimensions. */
|
|
13
|
+
outputDimensionality?: 128 | 256 | 512 | 1408;
|
|
14
|
+
}
|
|
15
|
+
export interface VertexMultimodalEmbeddingResult {
|
|
16
|
+
textEmbedding?: number[];
|
|
17
|
+
imageEmbedding?: number[];
|
|
18
|
+
videoEmbeddings?: Array<{
|
|
19
|
+
startOffsetSec: number;
|
|
20
|
+
endOffsetSec: number;
|
|
21
|
+
embedding: number[];
|
|
22
|
+
}>;
|
|
23
|
+
rawResponse: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface VertexMultimodalEmbeddingClient {
|
|
26
|
+
embed(input: VertexMultimodalEmbeddingInput): Promise<VertexMultimodalEmbeddingResult>;
|
|
27
|
+
}
|
|
28
|
+
export declare class VertexLegacyMultimodalEmbeddingModel implements EmbeddingModel {
|
|
29
|
+
private readonly baseURL;
|
|
30
|
+
private readonly fetcher;
|
|
31
|
+
private readonly assertAccess;
|
|
32
|
+
readonly provider = "vertex";
|
|
33
|
+
readonly modelId = "multimodalembedding@001";
|
|
34
|
+
readonly capabilities: {
|
|
35
|
+
streaming: boolean;
|
|
36
|
+
tools: boolean;
|
|
37
|
+
structuredOutput: boolean;
|
|
38
|
+
jsonMode: boolean;
|
|
39
|
+
toolChoice: boolean;
|
|
40
|
+
parallelToolCalls: boolean;
|
|
41
|
+
vision: boolean;
|
|
42
|
+
files: boolean;
|
|
43
|
+
audioInput: boolean;
|
|
44
|
+
audioOutput: boolean;
|
|
45
|
+
embeddings: boolean;
|
|
46
|
+
reasoning: boolean;
|
|
47
|
+
webSearch: boolean;
|
|
48
|
+
};
|
|
49
|
+
constructor(baseURL: string, fetcher: typeof globalThis.fetch, assertAccess: () => void);
|
|
50
|
+
embedMultimodal(input: VertexMultimodalEmbeddingInput): Promise<VertexMultimodalEmbeddingResult>;
|
|
51
|
+
embed(input: EmbedInput & RetryOptions): Promise<EmbedResult>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=multimodal-embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multimodal-embeddings.d.ts","sourceRoot":"","sources":["../src/multimodal-embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAC3F,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,MAAM,WAAW,8BAA+B,SAAQ,YAAY;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,2FAA2F;IAC3F,oBAAoB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;CAC/C;AACD,MAAM,WAAW,+BAA+B;IAC9C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/F,WAAW,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;CACxF;AAuCD,qBAAa,oCAAqC,YAAW,cAAc;IAM7D,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAU,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA2B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAL9H,QAAQ,CAAC,QAAQ,YAAY;IAC7B,QAAQ,CAAC,OAAO,6BAA6B;IAC7C,QAAQ,CAAC,YAAY;QAAK,SAAS;QAAS,KAAK;QAAS,gBAAgB;QAAS,QAAQ;QACzF,UAAU;QAAS,iBAAiB;QAAS,MAAM;QAAQ,KAAK;QAAS,UAAU;QACnF,WAAW;QAAS,UAAU;QAAQ,SAAS;QAAS,SAAS;MAAU;IAC7E,YAA6B,OAAO,EAAE,MAAM,EAAmB,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAAmB,YAAY,EAAE,MAAM,IAAI,EAAI;IAExI,eAAe,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CA8BrG;IAEK,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAoBlE;CACF"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { ConfigurationError, ProviderHTTPError, UnsupportedFeatureError, encodeMediaFrame, readErrorBodyWithLimit, readJsonWithLimit, withRetry, withTimeoutSignal } from "@zhivex-ai/core/provider";
|
|
2
|
+
const dimensions = new Set([128, 256, 512, 1408]);
|
|
3
|
+
const media = (input, kind) => {
|
|
4
|
+
if (!input || (input.data === undefined) === (input.uri === undefined))
|
|
5
|
+
throw new ConfigurationError(`Vertex ${kind} requires exactly one of data or uri.`);
|
|
6
|
+
if (typeof input.mediaType !== "string" || !input.mediaType.startsWith(`${kind}/`))
|
|
7
|
+
throw new ConfigurationError(`Vertex ${kind} requires a ${kind} MIME type.`);
|
|
8
|
+
if (kind === "image" && !["image/png", "image/jpeg"].includes(input.mediaType))
|
|
9
|
+
throw new UnsupportedFeatureError("Vertex multimodal embeddings accept JPEG or PNG images.");
|
|
10
|
+
if (input.providerMetadata && Object.keys(input.providerMetadata).length)
|
|
11
|
+
throw new UnsupportedFeatureError("Use videoSegmentConfig rather than media providerMetadata for legacy multimodal embeddings.");
|
|
12
|
+
if (input.uri !== undefined && !/^gs:\/\/[^/]+\/.+/.test(input.uri))
|
|
13
|
+
throw new ConfigurationError("Legacy multimodal embedding media requires a gs:// object URI.");
|
|
14
|
+
return {
|
|
15
|
+
...(input.uri !== undefined ? { gcsUri: input.uri } : { bytesBase64Encoded: encodeMediaFrame({ data: input.data, mediaType: input.mediaType }) }),
|
|
16
|
+
...(kind === "image" ? { mimeType: input.mediaType } : {})
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
const prepare = (input) => {
|
|
20
|
+
if (input.text === undefined && input.image === undefined && input.video === undefined)
|
|
21
|
+
throw new ConfigurationError("Vertex multimodal embeddings require text, image or video.");
|
|
22
|
+
if (input.text !== undefined && (typeof input.text !== "string" || !input.text.trim()))
|
|
23
|
+
throw new ConfigurationError("Vertex multimodal embedding text must be non-empty.");
|
|
24
|
+
if (input.outputDimensionality !== undefined && !dimensions.has(input.outputDimensionality))
|
|
25
|
+
throw new ConfigurationError("Vertex multimodal embedding dimensions must be 128, 256, 512 or 1408.");
|
|
26
|
+
if (input.outputDimensionality !== undefined && input.video !== undefined)
|
|
27
|
+
throw new UnsupportedFeatureError("Requests containing video use 1408 dimensions; outputDimensionality requires text/image-only input.");
|
|
28
|
+
if (input.videoSegmentConfig !== undefined) {
|
|
29
|
+
if (!input.video)
|
|
30
|
+
throw new ConfigurationError("videoSegmentConfig requires video input.");
|
|
31
|
+
const config = input.videoSegmentConfig;
|
|
32
|
+
if (!config || typeof config !== "object" || Array.isArray(config))
|
|
33
|
+
throw new ConfigurationError("videoSegmentConfig must be an object.");
|
|
34
|
+
for (const [key, value] of Object.entries(config)) {
|
|
35
|
+
if (!["startOffsetSec", "endOffsetSec", "intervalSec"].includes(key))
|
|
36
|
+
throw new ConfigurationError(`Unknown video segment option ${key}.`);
|
|
37
|
+
if (value !== undefined && (!Number.isSafeInteger(value) || value < (key === "intervalSec" ? 4 : 0)))
|
|
38
|
+
throw new ConfigurationError("Video offsets must be nonnegative integers and intervalSec must be at least 4.");
|
|
39
|
+
}
|
|
40
|
+
if (config.endOffsetSec !== undefined && config.endOffsetSec <= (config.startOffsetSec ?? 0))
|
|
41
|
+
throw new ConfigurationError("Video endOffsetSec must be greater than startOffsetSec.");
|
|
42
|
+
}
|
|
43
|
+
return { instances: [{ ...(input.text !== undefined ? { text: input.text } : {}),
|
|
44
|
+
...(input.image !== undefined ? { image: media(input.image, "image") } : {}),
|
|
45
|
+
...(input.video !== undefined ? { video: { ...media(input.video, "video"), ...(input.videoSegmentConfig ? { videoSegmentConfig: input.videoSegmentConfig } : {}) } } : {}) }],
|
|
46
|
+
...(input.outputDimensionality !== undefined ? { parameters: { dimension: input.outputDimensionality } } : {}) };
|
|
47
|
+
};
|
|
48
|
+
const vector = (value, size) => {
|
|
49
|
+
if (!Array.isArray(value) || value.length !== size || !value.every(n => typeof n === "number" && Number.isFinite(n)))
|
|
50
|
+
throw new ConfigurationError("Vertex returned an invalid multimodal embedding vector.");
|
|
51
|
+
return value;
|
|
52
|
+
};
|
|
53
|
+
export class VertexLegacyMultimodalEmbeddingModel {
|
|
54
|
+
baseURL;
|
|
55
|
+
fetcher;
|
|
56
|
+
assertAccess;
|
|
57
|
+
provider = "vertex";
|
|
58
|
+
modelId = "multimodalembedding@001";
|
|
59
|
+
capabilities = { streaming: false, tools: false, structuredOutput: false, jsonMode: false,
|
|
60
|
+
toolChoice: false, parallelToolCalls: false, vision: true, files: false, audioInput: false,
|
|
61
|
+
audioOutput: false, embeddings: true, reasoning: false, webSearch: false };
|
|
62
|
+
constructor(baseURL, fetcher, assertAccess) {
|
|
63
|
+
this.baseURL = baseURL;
|
|
64
|
+
this.fetcher = fetcher;
|
|
65
|
+
this.assertAccess = assertAccess;
|
|
66
|
+
}
|
|
67
|
+
async embedMultimodal(input) {
|
|
68
|
+
this.assertAccess();
|
|
69
|
+
const body = prepare(input);
|
|
70
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
71
|
+
try {
|
|
72
|
+
const response = await withRetry(async () => {
|
|
73
|
+
const response = await this.fetcher(`${this.baseURL}/publishers/google/models/multimodalembedding@001:predict`, {
|
|
74
|
+
method: "POST", headers: { "content-type": "application/json" }, redirect: "error", signal, body: JSON.stringify(body)
|
|
75
|
+
});
|
|
76
|
+
if (!response.ok)
|
|
77
|
+
throw new ProviderHTTPError(`Vertex multimodal embeddings failed with status ${response.status}.`, response.status, { responseBody: await readErrorBodyWithLimit(response) });
|
|
78
|
+
return response;
|
|
79
|
+
}, { ...input, abortSignal: signal });
|
|
80
|
+
const raw = await readJsonWithLimit(response, { maxBytes: 128 * 1024 * 1024 });
|
|
81
|
+
if (!Array.isArray(raw?.predictions) || raw.predictions.length !== 1 || !raw.predictions[0])
|
|
82
|
+
throw new ConfigurationError("Vertex multimodal embeddings require exactly one prediction.");
|
|
83
|
+
const prediction = raw.predictions[0];
|
|
84
|
+
const result = { rawResponse: raw };
|
|
85
|
+
const size = input.outputDimensionality ?? 1408;
|
|
86
|
+
if (input.text !== undefined)
|
|
87
|
+
result.textEmbedding = vector(prediction.textEmbedding, size);
|
|
88
|
+
if (input.image !== undefined)
|
|
89
|
+
result.imageEmbedding = vector(prediction.imageEmbedding, size);
|
|
90
|
+
if (input.video !== undefined) {
|
|
91
|
+
if (!Array.isArray(prediction.videoEmbeddings) || !prediction.videoEmbeddings.length)
|
|
92
|
+
throw new ConfigurationError("Vertex returned no video embedding segments.");
|
|
93
|
+
let previousEnd = -1;
|
|
94
|
+
result.videoEmbeddings = prediction.videoEmbeddings.map((segment) => {
|
|
95
|
+
if (!segment || !Number.isFinite(segment.startOffsetSec) || !Number.isFinite(segment.endOffsetSec) || segment.startOffsetSec < 0 || segment.startOffsetSec < previousEnd || segment.endOffsetSec <= segment.startOffsetSec)
|
|
96
|
+
throw new ConfigurationError("Vertex returned invalid video segment offsets.");
|
|
97
|
+
previousEnd = segment.endOffsetSec;
|
|
98
|
+
return { startOffsetSec: segment.startOffsetSec, endOffsetSec: segment.endOffsetSec, embedding: vector(segment.embedding, 1408) };
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
cleanup();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async embed(input) {
|
|
108
|
+
const options = input.providerOptions ?? {};
|
|
109
|
+
for (const key of Object.keys(options))
|
|
110
|
+
if (key !== "outputDimensionality")
|
|
111
|
+
throw new UnsupportedFeatureError(`Legacy multimodal embeddings do not expose providerOptions.${key}.`);
|
|
112
|
+
// Validate the complete batch before starting requests. Each value maps to one vector.
|
|
113
|
+
const requests = input.values.map(value => {
|
|
114
|
+
if (typeof value !== "string" && value?.mediaType?.startsWith("video/"))
|
|
115
|
+
throw new UnsupportedFeatureError("Use vertex.multimodalEmbeddings.embed({ video }) to retain all video segments and timestamps.");
|
|
116
|
+
const request = { ...(typeof value === "string" ? { text: value } : { image: value }), outputDimensionality: options.outputDimensionality };
|
|
117
|
+
prepare(request);
|
|
118
|
+
return request;
|
|
119
|
+
});
|
|
120
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
121
|
+
try {
|
|
122
|
+
const embeddings = [], rawResponse = [];
|
|
123
|
+
for (const request of requests) {
|
|
124
|
+
const result = await this.embedMultimodal({ ...input, ...request, abortSignal: signal });
|
|
125
|
+
embeddings.push(result.textEmbedding ?? result.imageEmbedding);
|
|
126
|
+
rawResponse.push(result.rawResponse);
|
|
127
|
+
}
|
|
128
|
+
return { embeddings, rawResponse };
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
cleanup();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=multimodal-embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multimodal-embeddings.js","sourceRoot":"","sources":["../src/multimodal-embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type LanguageModel } from "@zhivex-ai/core/provider";
|
|
2
|
+
export declare const createVertexResponsesModel: (requestedId: string, baseURL: string, fetcher: typeof globalThis.fetch, allowUnsafeEndpoints?: boolean) => LanguageModel;
|
|
3
|
+
//# sourceMappingURL=responses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAmDlC,eAAO,MAAM,0BAA0B,gBACxB,MAAM,WAAW,MAAM,WAAW,OAAO,UAAU,CAAC,KAAK,yBAAyB,OAAO,KACrG,aA0CF,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { createOpenAI } from "@zhivex-ai/openai";
|
|
2
|
+
import { ConfigurationError, ProviderHTTPError, UnsupportedFeatureError, isCallableToolDefinition } from "@zhivex-ai/core/provider";
|
|
3
|
+
import { vertexChatProfile } from "./chat-profiles.js";
|
|
4
|
+
// Vertex's Grok Responses contract is stateless, regardless of direct xAI/OpenAI defaults.
|
|
5
|
+
// https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/partner-models/grok/responses
|
|
6
|
+
const models = new Set([
|
|
7
|
+
"xai/grok-4.6", "xai/grok-4.3", "xai/grok-4.20-reasoning", "xai/grok-4.20-non-reasoning",
|
|
8
|
+
"xai/grok-4.1-fast-reasoning", "xai/grok-4.1-fast-non-reasoning"
|
|
9
|
+
]);
|
|
10
|
+
const remap = (message, from, to) => ({
|
|
11
|
+
...message, parts: message.parts.map(part => part.type === "provider-data" && part.provider === from
|
|
12
|
+
? { ...part, provider: to } : part)
|
|
13
|
+
});
|
|
14
|
+
const prepare = (input) => {
|
|
15
|
+
const options = input.providerOptions ?? {};
|
|
16
|
+
for (const [key, value] of Object.entries(options)) {
|
|
17
|
+
if (value === undefined)
|
|
18
|
+
continue;
|
|
19
|
+
if (key === "store" && value === false)
|
|
20
|
+
continue;
|
|
21
|
+
if (key === "parallel_tool_calls" && typeof value === "boolean")
|
|
22
|
+
continue;
|
|
23
|
+
if (key === "top_p" && typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 1)
|
|
24
|
+
continue;
|
|
25
|
+
throw new UnsupportedFeatureError(`Vertex Grok Responses does not support providerOptions.${key} with this value.`);
|
|
26
|
+
}
|
|
27
|
+
if (input.reasoning !== undefined)
|
|
28
|
+
throw new UnsupportedFeatureError("Vertex Grok Responses thinking is model-defined; reasoning controls are not exposed.");
|
|
29
|
+
for (const tool of Object.values(input.tools ?? {})) {
|
|
30
|
+
if (!isCallableToolDefinition(tool))
|
|
31
|
+
throw new UnsupportedFeatureError("Vertex Grok Responses supports callable functions, not hosted tools.");
|
|
32
|
+
if (Object.keys(tool.metadata ?? {}).some(key => key.startsWith("openai.")))
|
|
33
|
+
throw new UnsupportedFeatureError("Vertex Grok Responses does not support OpenAI tool metadata.");
|
|
34
|
+
}
|
|
35
|
+
for (const message of input.messages)
|
|
36
|
+
for (const part of message.parts) {
|
|
37
|
+
if (!["text", "image", "tool-call", "tool-result", "provider-data"].includes(part.type)) {
|
|
38
|
+
throw new UnsupportedFeatureError(`Vertex Grok Responses does not support ${part.type} input.`);
|
|
39
|
+
}
|
|
40
|
+
if (part.type === "provider-data" && part.provider !== "vertex")
|
|
41
|
+
throw new UnsupportedFeatureError("Vertex Grok Responses requires Vertex provider-data history.");
|
|
42
|
+
if (part.type === "tool-result" && part.toolResult.providerMetadata?.responsesToolType !== undefined) {
|
|
43
|
+
throw new UnsupportedFeatureError("Vertex Grok Responses does not support hosted tool outputs.");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return { ...input, messages: input.messages.map(message => {
|
|
47
|
+
const mapped = remap(message, "vertex", "openai");
|
|
48
|
+
// The transport recognizes OpenAI built-ins by name. On Vertex every local
|
|
49
|
+
// result is a function_call_output, even functions named shell or computer.
|
|
50
|
+
return { ...mapped, parts: mapped.parts.map(part => part.type === "tool-result"
|
|
51
|
+
? { ...part, toolResult: { ...part.toolResult, toolName: "vertex_function" } } : part) };
|
|
52
|
+
}), providerOptions: { ...options, apiMode: "responses", store: false } };
|
|
53
|
+
};
|
|
54
|
+
const rethrow = (error) => {
|
|
55
|
+
if (error instanceof ProviderHTTPError)
|
|
56
|
+
throw new ProviderHTTPError(`Vertex Responses request failed with status ${error.status}.`, error.status, {
|
|
57
|
+
cause: error, responseBody: error.responseBody
|
|
58
|
+
});
|
|
59
|
+
throw error;
|
|
60
|
+
};
|
|
61
|
+
export const createVertexResponsesModel = (requestedId, baseURL, fetcher, allowUnsafeEndpoints) => {
|
|
62
|
+
const modelId = requestedId.startsWith("grok-") ? `xai/${requestedId}` : requestedId;
|
|
63
|
+
if (!models.has(modelId))
|
|
64
|
+
throw new ConfigurationError("Vertex Responses requires a supported xai/grok model ID.");
|
|
65
|
+
if (!/\/projects\/[^/]+\/locations\/global$/.test(baseURL))
|
|
66
|
+
throw new ConfigurationError("Vertex Grok Responses requires a project-scoped global endpoint.");
|
|
67
|
+
const endpoint = `${baseURL}/endpoints/openapi/responses`;
|
|
68
|
+
const delegate = createOpenAI({
|
|
69
|
+
// Authenticated Vertex fetch always replaces this transport-only placeholder.
|
|
70
|
+
apiKey: "vertex-authenticated-transport", baseURL: `${baseURL}/endpoints/openapi`, allowUnsafeEndpoints,
|
|
71
|
+
fetch: async (url, init) => {
|
|
72
|
+
if (String(url) !== endpoint || init?.method !== "POST")
|
|
73
|
+
throw new ConfigurationError("Unexpected Vertex Responses transport route.");
|
|
74
|
+
return fetcher(url, { ...init, redirect: "error" });
|
|
75
|
+
}
|
|
76
|
+
})(modelId);
|
|
77
|
+
return {
|
|
78
|
+
provider: "vertex", modelId: requestedId,
|
|
79
|
+
capabilities: { ...vertexChatProfile(modelId).capabilities, jsonMode: false },
|
|
80
|
+
async generate(input) {
|
|
81
|
+
const prepared = prepare(input);
|
|
82
|
+
try {
|
|
83
|
+
const result = await delegate.generate(prepared);
|
|
84
|
+
return { ...result,
|
|
85
|
+
...(result.message ? { message: remap(result.message, "openai", "vertex") } : {}),
|
|
86
|
+
...(result.messages ? { messages: result.messages.map(message => remap(message, "openai", "vertex")) } : {}) };
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return rethrow(error);
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
async stream(input) {
|
|
93
|
+
const prepared = prepare(input);
|
|
94
|
+
let events;
|
|
95
|
+
try {
|
|
96
|
+
events = await delegate.stream(prepared);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return rethrow(error);
|
|
100
|
+
}
|
|
101
|
+
return (async function* () {
|
|
102
|
+
let finished = false;
|
|
103
|
+
try {
|
|
104
|
+
for await (const event of events) {
|
|
105
|
+
if (event.type === "finish")
|
|
106
|
+
finished = true;
|
|
107
|
+
yield event.type === "provider-data" && event.provider === "openai"
|
|
108
|
+
? { ...event, provider: "vertex" } : event;
|
|
109
|
+
}
|
|
110
|
+
if (!finished)
|
|
111
|
+
throw new ConfigurationError("Vertex Responses stream ended without a terminal response.");
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
rethrow(error);
|
|
115
|
+
}
|
|
116
|
+
})();
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=responses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responses.js","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,kBAAkB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,wBAAwB,EAEzF,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,2FAA2F;AAC3F,sGAAsG;AACtG,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;IACrB,cAAc,EAAE,cAAc,EAAE,yBAAyB,EAAE,6BAA6B;IACxF,6BAA6B,EAAE,iCAAiC;CACjE,CAAC,CAAC;AACH,MAAM,KAAK,GAAG,CAAC,OAAqB,EAAE,IAAY,EAAE,EAAU,EAAgB,EAAE,CAAC,CAAC;IAChF,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAClG,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;CACtC,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,CAAC,KAAyB,EAAsB,EAAE;IAChE,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,GAAG,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK;YAAE,SAAS;QACjD,IAAI,GAAG,KAAK,qBAAqB,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,SAAS;QAC1E,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS;QACjH,MAAM,IAAI,uBAAuB,CAAC,0DAA0D,GAAG,mBAAmB,CAAC,CAAC;IACtH,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,MAAM,IAAI,uBAAuB,CAAC,sFAAsF,CAAC,CAAC;IAC7J,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,uBAAuB,CAAC,sEAAsE,CAAC,CAAC;QAC/I,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAAE,MAAM,IAAI,uBAAuB,CAAC,8DAA8D,CAAC,CAAC;IACjL,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ;QAAE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACvE,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxF,MAAM,IAAI,uBAAuB,CAAC,0CAA0C,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAAE,MAAM,IAAI,uBAAuB,CAAC,8DAA8D,CAAC,CAAC;YACnK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACrG,MAAM,IAAI,uBAAuB,CAAC,6DAA6D,CAAC,CAAC;YACnG,CAAC;QACH,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAClD,2EAA2E;YAC3E,4EAA4E;YAC5E,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa;oBAC7E,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7F,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;AAC5E,CAAC,CAAC;AACF,MAAM,OAAO,GAAG,CAAC,KAAc,EAAS,EAAE;IACxC,IAAI,KAAK,YAAY,iBAAiB;QAAE,MAAM,IAAI,iBAAiB,CAAC,+CAA+C,KAAK,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE;YAChJ,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY;SAC/C,CAAC,CAAC;IACH,MAAM,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,WAAmB,EAAE,OAAe,EAAE,OAAgC,EAAE,oBAA8B,EACvF,EAAE;IACjB,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACrF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,0DAA0D,CAAC,CAAC;IACnH,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,kEAAkE,CAAC,CAAC;IAC7J,MAAM,QAAQ,GAAG,GAAG,OAAO,8BAA8B,CAAC;IAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,8EAA8E;QAC9E,MAAM,EAAE,gCAAgC,EAAE,OAAO,EAAE,GAAG,OAAO,oBAAoB,EAAE,oBAAoB;QACvG,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACzB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,IAAI,EAAE,MAAM,KAAK,MAAM;gBAAE,MAAM,IAAI,kBAAkB,CAAC,8CAA8C,CAAC,CAAC;YACtI,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;KACF,CAAC,CAAC,OAAO,CAAC,CAAC;IACZ,OAAO;QACL,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW;QACxC,YAAY,EAAE,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC7E,KAAK,CAAC,QAAQ,CAAC,KAAK;YAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO,EAAE,GAAG,MAAM;oBAChB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACnH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,MAAkC,CAAC;YACvC,IAAI,CAAC;gBAAC,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAO,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;YAC3F,OAAO,CAAC,KAAK,SAAS,CAAC;gBACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC;oBACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBACjC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;4BAAE,QAAQ,GAAG,IAAI,CAAC;wBAC7C,MAAM,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;4BACjE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC/C,CAAC;oBACD,IAAI,CAAC,QAAQ;wBAAE,MAAM,IAAI,kBAAkB,CAAC,4DAA4D,CAAC,CAAC;gBAC5G,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;YACrC,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|