@zhivex-ai/qwen 0.15.3 → 0.16.2

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.
Files changed (66) hide show
  1. package/README.md +46 -1
  2. package/dist/browser-realtime.d.ts +58 -0
  3. package/dist/browser-realtime.d.ts.map +1 -0
  4. package/dist/browser-realtime.js +259 -0
  5. package/dist/browser-realtime.js.map +1 -0
  6. package/dist/browser.d.ts +9 -0
  7. package/dist/browser.d.ts.map +1 -0
  8. package/dist/browser.js +7 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/cloud-media.d.ts +89 -0
  11. package/dist/cloud-media.d.ts.map +1 -0
  12. package/dist/cloud-media.js +221 -0
  13. package/dist/cloud-media.js.map +1 -0
  14. package/dist/cloud-realtime.d.ts +58 -0
  15. package/dist/cloud-realtime.d.ts.map +1 -0
  16. package/dist/cloud-realtime.js +123 -0
  17. package/dist/cloud-realtime.js.map +1 -0
  18. package/dist/decision.d.ts +69 -0
  19. package/dist/decision.d.ts.map +1 -0
  20. package/dist/decision.js +122 -0
  21. package/dist/decision.js.map +1 -0
  22. package/dist/embeddings.d.ts +30 -0
  23. package/dist/embeddings.d.ts.map +1 -0
  24. package/dist/embeddings.js +94 -0
  25. package/dist/embeddings.js.map +1 -0
  26. package/dist/index.d.ts +40 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +365 -144
  29. package/dist/index.js.map +1 -1
  30. package/dist/inference-audio.d.ts +146 -0
  31. package/dist/inference-audio.d.ts.map +1 -0
  32. package/dist/inference-audio.js +256 -0
  33. package/dist/inference-audio.js.map +1 -0
  34. package/dist/native-asr.d.ts +52 -0
  35. package/dist/native-asr.d.ts.map +1 -0
  36. package/dist/native-asr.js +162 -0
  37. package/dist/native-asr.js.map +1 -0
  38. package/dist/rtc-protocol.d.ts +10 -0
  39. package/dist/rtc-protocol.d.ts.map +1 -0
  40. package/dist/rtc-protocol.js +10 -0
  41. package/dist/rtc-protocol.js.map +1 -0
  42. package/dist/sdp-exchange.d.ts +8 -0
  43. package/dist/sdp-exchange.d.ts.map +1 -0
  44. package/dist/sdp-exchange.js +25 -0
  45. package/dist/sdp-exchange.js.map +1 -0
  46. package/dist/temporary-keys.d.ts +15 -0
  47. package/dist/temporary-keys.d.ts.map +1 -0
  48. package/dist/temporary-keys.js +28 -0
  49. package/dist/temporary-keys.js.map +1 -0
  50. package/dist/text-profiles.d.ts +7 -0
  51. package/dist/text-profiles.d.ts.map +1 -0
  52. package/dist/text-profiles.js +55 -0
  53. package/dist/text-profiles.js.map +1 -0
  54. package/dist/url-path.d.ts +3 -0
  55. package/dist/url-path.d.ts.map +1 -0
  56. package/dist/url-path.js +8 -0
  57. package/dist/url-path.js.map +1 -0
  58. package/dist/world-rtc.d.ts +30 -0
  59. package/dist/world-rtc.d.ts.map +1 -0
  60. package/dist/world-rtc.js +33 -0
  61. package/dist/world-rtc.js.map +1 -0
  62. package/dist/worlds.d.ts +134 -0
  63. package/dist/worlds.d.ts.map +1 -0
  64. package/dist/worlds.js +196 -0
  65. package/dist/worlds.js.map +1 -0
  66. package/package.json +6 -2
@@ -0,0 +1,221 @@
1
+ import { ConfigurationError, ProviderHTTPError, readJsonWithLimit, withTimeoutSignal } from "@zhivex-ai/core";
2
+ export function requireCloudText(value, name, max = 10000) {
3
+ if (typeof value !== "string" || !value.trim() || value.length > max)
4
+ throw new ConfigurationError(`${name} must be nonempty and at most ${max} characters.`);
5
+ }
6
+ export function requireCloudURL(value) {
7
+ requireCloudText(value, "media URL");
8
+ let url;
9
+ try {
10
+ url = new URL(value);
11
+ }
12
+ catch {
13
+ throw new ConfigurationError("Invalid media URL.");
14
+ }
15
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password)
16
+ throw new ConfigurationError("Media requires an HTTP(S) URL without credentials.");
17
+ }
18
+ /** Mutations are deliberately not retried: these APIs have no idempotency key. */
19
+ export async function cloudRequest(apiKey, url, fetcher, options, body, async = false) {
20
+ const { signal, cleanup } = withTimeoutSignal({ ...options, timeoutMs: options.timeoutMs ?? 60000 });
21
+ try {
22
+ const response = await fetcher(url, { method: body === undefined ? "GET" : "POST", redirect: "error", signal,
23
+ headers: { authorization: `Bearer ${apiKey}`, "content-type": "application/json", ...(async ? { "X-DashScope-Async": "enable" } : {}) },
24
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }) });
25
+ const json = await readJsonWithLimit(response, { provider: "qwen", endpoint: "cloud-media", maxBytes: 8 * 1024 * 1024 });
26
+ if (!json || typeof json !== "object" || Array.isArray(json))
27
+ throw new ConfigurationError("Invalid Qwen Cloud response envelope.");
28
+ if (!response.ok || (json.code !== undefined && json.code !== 0))
29
+ throw new ProviderHTTPError("Qwen Cloud media request failed.", response.status, { responseBody: { code: typeof json.code === "string" || typeof json.code === "number" ? json.code : undefined, request_id: typeof json.request_id === "string" ? json.request_id : undefined } });
30
+ return json;
31
+ }
32
+ finally {
33
+ cleanup();
34
+ }
35
+ }
36
+ export function createQwenImageTranslationModel(modelId, apiKey, taskBaseURL, fetcher) {
37
+ if (!["qwen-mt-image", "qwen-mt-image-2.0"].includes(modelId))
38
+ throw new ConfigurationError("Unsupported Qwen image translation model.");
39
+ return { modelId, async translate(input) {
40
+ requireCloudURL(input.imageUrl);
41
+ requireCloudText(input.sourceLanguage, "sourceLanguage", 64);
42
+ requireCloudText(input.targetLanguage, "targetLanguage", 64);
43
+ if (input.targetLanguage.toLowerCase() === "auto")
44
+ throw new ConfigurationError("targetLanguage cannot be auto.");
45
+ if (input.domainHint !== undefined && input.domainHint.trim().split(/\s+/).length > 200)
46
+ throw new ConfigurationError("domainHint supports at most 200 words.");
47
+ if (input.sensitiveWords && (input.sensitiveWords.length > 50 || input.sensitiveWords.some(word => typeof word !== "string" || !word)))
48
+ throw new ConfigurationError("sensitiveWords supports at most 50 nonempty strings.");
49
+ for (const term of input.terminologies ?? []) {
50
+ requireCloudText(term.src, "terminology.src");
51
+ requireCloudText(term.tgt, "terminology.tgt");
52
+ }
53
+ const async = input.async ?? modelId === "qwen-mt-image";
54
+ if (!async && modelId === "qwen-mt-image")
55
+ throw new ConfigurationError("Legacy image translation only supports asynchronous mode.");
56
+ const json = await cloudRequest(apiKey, `${taskBaseURL}/services/aigc/image2image/image-synthesis`, fetcher, input, { model: modelId, input: {
57
+ image_url: input.imageUrl, source_lang: input.sourceLanguage, target_lang: input.targetLanguage,
58
+ ext: { domainHint: input.domainHint, sensitives: input.sensitiveWords, terminologies: input.terminologies, config: { imageSegment: input.imageSegment } }
59
+ } }, async);
60
+ const value = async ? json.output?.task_id : json.output?.image_url;
61
+ requireCloudText(value, async ? "response task ID" : "response image URL");
62
+ if (!async)
63
+ requireCloudURL(value);
64
+ return { ...(async ? { operationName: value } : { imageUrl: value }), requestId: json.request_id, rawResponse: json };
65
+ } };
66
+ }
67
+ export function validateWan30(media, parameters) {
68
+ if (parameters.duration !== undefined && (typeof parameters.duration !== "number" || !Number.isInteger(parameters.duration) || (parameters.duration !== -1 && (parameters.duration < 2 || parameters.duration > 30))))
69
+ throw new ConfigurationError("Wan 3.0 duration must be -1 or an integer from 2 to 30.");
70
+ if (parameters.resolution !== undefined && !["480P", "720P", "1080P"].includes(String(parameters.resolution)))
71
+ throw new ConfigurationError("Invalid Wan 3.0 resolution.");
72
+ if (parameters.ratio !== undefined && !["adaptive", "21:9", "16:9", "4:3", "1:1", "3:4", "9:16"].includes(String(parameters.ratio)))
73
+ throw new ConfigurationError("Invalid Wan 3.0 ratio.");
74
+ if (media === undefined)
75
+ return;
76
+ if (!Array.isArray(media) || !media.length)
77
+ throw new ConfigurationError("Wan 3.0 media must be a nonempty array.");
78
+ const counts = {};
79
+ for (const item of media) {
80
+ if (!item || !["first_frame", "last_frame", "reference_image", "reference_video", "reference_audio", "file", "link"].includes(item.type))
81
+ throw new ConfigurationError("Invalid Wan 3.0 media type.");
82
+ if (typeof item.url === "string" && item.url.startsWith("data:") && item.type !== "link") {
83
+ if (!/^data:[A-Za-z0-9.+-]+\/[A-Za-z0-9.+-]+;base64,[A-Za-z0-9+/]+={0,2}$/.test(item.url))
84
+ throw new ConfigurationError("Invalid Wan 3.0 media data URI.");
85
+ }
86
+ else
87
+ requireCloudURL(item.url);
88
+ counts[item.type] = (counts[item.type] ?? 0) + 1;
89
+ }
90
+ for (const [type, max] of Object.entries({ first_frame: 1, last_frame: 1, reference_image: 10, reference_video: 5, reference_audio: 5, file: 1, link: 1 }))
91
+ if ((counts[type] ?? 0) > max)
92
+ throw new ConfigurationError(`Too many Wan 3.0 ${type} inputs.`);
93
+ if (counts.last_frame && !counts.first_frame)
94
+ throw new ConfigurationError("last_frame requires first_frame.");
95
+ if ((counts.first_frame || counts.last_frame) && Object.keys(counts).some(type => type !== "first_frame" && type !== "last_frame"))
96
+ throw new ConfigurationError("First/last frames cannot be mixed with reference media.");
97
+ if ((counts.file || counts.link) && parameters.prompt_extend === false)
98
+ throw new ConfigurationError("File/link input requires prompt_extend=true.");
99
+ if (counts.file && counts.link)
100
+ throw new ConfigurationError("Provide either a file or link, not both.");
101
+ }
102
+ export function validateQwenImage30(input, parameters) {
103
+ requireCloudText(input.prompt, "prompt", 100000);
104
+ if ((input.images?.length ?? 0) > 3)
105
+ throw new ConfigurationError("Qwen Image 3.0 accepts at most three reference images.");
106
+ if (parameters.prompt_extend_mode !== undefined && !["direct", "agent"].includes(String(parameters.prompt_extend_mode)))
107
+ throw new ConfigurationError("Invalid Image 3.0 prompt_extend_mode.");
108
+ if (parameters.prompt_extend_mode === "agent" && input.images?.length)
109
+ throw new ConfigurationError("Image 3.0 agent enhancement is text-to-image only.");
110
+ const count = input.count ?? parameters.n;
111
+ if (count !== undefined && (typeof count !== "number" || !Number.isInteger(count) || count < 1 || count > 6))
112
+ throw new ConfigurationError("Qwen Image 3.0 count must be an integer from 1 to 6.");
113
+ const size = input.size ?? parameters.size;
114
+ if (size !== undefined) {
115
+ const match = typeof size === "string" ? /^(\d+)\*(\d+)$/.exec(size) : null;
116
+ const w = Number(match?.[1]), h = Number(match?.[2]);
117
+ if (!match || w * h < 512 * 512 || w * h > 2048 * 2048 || w / h < 1 / 8 || w / h > 8)
118
+ throw new ConfigurationError("Qwen Image 3.0 size requires width*height, 512²–2048² pixels and ratio 1:8–8:1.");
119
+ }
120
+ }
121
+ /** HappyHorse uses media[], including first-frame input; it does not accept legacy img_url. */
122
+ export function validateHappyHorse(modelId, media, parameters) {
123
+ if (modelId === "happyhorse-1.0-video-edit") {
124
+ if (parameters.duration !== undefined || parameters.ratio !== undefined)
125
+ throw new ConfigurationError("HappyHorse video editing preserves source duration and ratio; omit duration and ratio.");
126
+ if (parameters.resolution !== undefined && !["720P", "1080P"].includes(String(parameters.resolution)))
127
+ throw new ConfigurationError("HappyHorse editing supports 720P or 1080P.");
128
+ if (parameters.audio_setting !== undefined && !["auto", "origin"].includes(String(parameters.audio_setting)))
129
+ throw new ConfigurationError("HappyHorse audio_setting must be auto or origin.");
130
+ if (!Array.isArray(media) || media.filter(item => item?.type === "video").length !== 1 || media.filter(item => item?.type === "reference_image").length > 5 || media.some(item => !["video", "reference_image"].includes(item?.type)))
131
+ throw new ConfigurationError("HappyHorse editing requires one video and at most five reference_image assets.");
132
+ for (const item of media) {
133
+ if (item.type === "reference_image" && typeof item.url === "string" && item.url.startsWith("data:")) {
134
+ if (!/^data:image\/(?:jpeg|png|webp);base64,[A-Za-z0-9+/]+={0,2}$/.test(item.url))
135
+ throw new ConfigurationError("Invalid HappyHorse reference image.");
136
+ }
137
+ else
138
+ requireCloudURL(item.url);
139
+ }
140
+ return;
141
+ }
142
+ if (parameters.duration !== undefined && (typeof parameters.duration !== "number" || !Number.isInteger(parameters.duration) || parameters.duration < 3 || parameters.duration > 15))
143
+ throw new ConfigurationError("HappyHorse duration must be an integer from 3 to 15.");
144
+ if (parameters.resolution !== undefined && !["480P", "720P", "1080P"].includes(String(parameters.resolution)))
145
+ throw new ConfigurationError("Invalid HappyHorse resolution.");
146
+ if (parameters.ratio !== undefined && !["16:9", "9:16", "1:1", "4:3", "3:4", "4:5", "5:4", "9:21", "21:9"].includes(String(parameters.ratio)))
147
+ throw new ConfigurationError("Invalid HappyHorse ratio.");
148
+ if (modelId.endsWith("-t2v")) {
149
+ if (media !== undefined)
150
+ throw new ConfigurationError("HappyHorse t2v does not accept media.");
151
+ return;
152
+ }
153
+ const type = modelId.endsWith("-i2v") ? "first_frame" : modelId.endsWith("-r2v") ? "reference_image" : undefined;
154
+ if (!type)
155
+ return;
156
+ if (!Array.isArray(media) || media.length < 1 || media.length > (type === "first_frame" ? 1 : 9))
157
+ throw new ConfigurationError(`HappyHorse ${type} media count is invalid.`);
158
+ for (const item of media) {
159
+ if (item?.type !== type)
160
+ throw new ConfigurationError(`HappyHorse requires ${type} inputs.`);
161
+ if (typeof item.url === "string" && item.url.startsWith("data:")) {
162
+ if (!/^data:image\/(?:jpeg|png|webp);base64,[A-Za-z0-9+/]+={0,2}$/.test(item.url))
163
+ throw new ConfigurationError("Invalid HappyHorse image data URI.");
164
+ }
165
+ else
166
+ requireCloudURL(item.url);
167
+ }
168
+ }
169
+ export function prepareViduVideo(modelId, media, parameters) {
170
+ const bounds = {
171
+ "vidu/viduq3-mix_reference2video": [1, 16], "vidu/viduq3-ad_reference2video": [3, 15],
172
+ "vidu/viduq3-drama_reference2video": [2, 15], "vidu/viduq2-pro-fast_img2video": [1, 10]
173
+ };
174
+ const range = bounds[modelId];
175
+ if (!range)
176
+ throw new ConfigurationError("Unsupported Vidu video model.");
177
+ const firstFrame = modelId.endsWith("_img2video");
178
+ if (!Array.isArray(media) || media.length < 1 || media.length > (firstFrame ? 1 : 7))
179
+ throw new ConfigurationError("Invalid Vidu image count.");
180
+ for (const item of media) {
181
+ if (item?.type !== "image")
182
+ throw new ConfigurationError("Vidu requires media type=image.");
183
+ requireCloudURL(item.url);
184
+ }
185
+ const output = { ...parameters };
186
+ const duration = output.duration ?? 5;
187
+ if (typeof duration !== "number" || !Number.isInteger(duration) || duration < range[0] || duration > range[1])
188
+ throw new ConfigurationError(`Vidu duration must be an integer from ${range[0]} to ${range[1]}.`);
189
+ output.duration = duration;
190
+ const resolution = output.resolution ?? (modelId.includes("drama") ? "1080P" : "720P");
191
+ if (resolution !== "720P" && resolution !== "1080P")
192
+ throw new ConfigurationError("Vidu resolution must be 720P or 1080P.");
193
+ output.resolution = resolution;
194
+ if (firstFrame && output.ratio !== undefined)
195
+ throw new ConfigurationError("Vidu first-frame output follows the image aspect ratio.");
196
+ if (output.ratio !== undefined) {
197
+ const ratios = modelId.includes("drama") ? ["16:9", "9:16"] : ["16:9", "4:3", "1:1", "3:4", "9:16"];
198
+ if (!ratios.includes(String(output.ratio)))
199
+ throw new ConfigurationError("Unsupported Vidu ratio.");
200
+ const sizes = resolution === "720P" ? { "16:9": "1280*720", "4:3": "1280*960", "1:1": "1280*1280", "3:4": "960*1280", "9:16": "720*1280" } : { "16:9": "1920*1080", "4:3": "1920*1440", "1:1": "1920*1920", "3:4": "1440*1920", "9:16": "1080*1920" };
201
+ output.size = sizes[String(output.ratio)];
202
+ delete output.ratio;
203
+ }
204
+ if (output.n !== undefined && output.n !== 1)
205
+ throw new ConfigurationError("Vidu produces one video per task.");
206
+ delete output.n;
207
+ if (output.audio !== undefined && (modelId.includes("drama") || firstFrame))
208
+ throw new ConfigurationError("audio toggle is supported only by Vidu mix/ad models.");
209
+ return output;
210
+ }
211
+ export function validateViduImage(input, parameters) {
212
+ requireCloudText(input.prompt, "prompt", 5000);
213
+ if ((input.images?.length ?? 0) > 14)
214
+ throw new ConfigurationError("Vidu accepts at most 14 reference images.");
215
+ if ((input.count ?? parameters.n ?? 1) !== 1)
216
+ throw new ConfigurationError("Vidu generates one image per task.");
217
+ const sizes = "1024*1024,720*1440,1440*720,1024*768,768*1024,1920*1088,1088*1920,1536*1024,1024*1536,1920*816,816*1920,2048*2048,1088*2160,2160*1088,2736*2048,2048*2736,2560*1440,1440*2560,3072*2048,2048*3072,2560*1104,1104*2560,2880*2880,1440*2880,2880*1440,3312*2480,2480*3312,3840*2160,2160*3840,3520*2352,2352*3520,3840*1648,1648*3840".split(",");
218
+ if (!sizes.includes(String(input.size ?? parameters.size ?? "1024*1024")))
219
+ throw new ConfigurationError("Unsupported Vidu image size.");
220
+ }
221
+ //# sourceMappingURL=cloud-media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-media.js","sourceRoot":"","sources":["../src/cloud-media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { type RealtimeSession, type RealtimeSessionConfig, type RealtimeConnection, type AudioFrame, type RealtimeEvent } from "@zhivex-ai/core";
2
+ export interface QwenRealtimeMCPServer {
3
+ type: "mcp";
4
+ server_label: string;
5
+ server_url: string;
6
+ authorization?: string;
7
+ headers?: Record<string, string>;
8
+ allowed_tools?: string[];
9
+ require_approval?: "always" | "never";
10
+ }
11
+ export interface QwenCloudRealtimeOptions extends Record<string, unknown> {
12
+ mcpServers?: QwenRealtimeMCPServer[];
13
+ enable_search?: boolean;
14
+ max_history_turns?: number;
15
+ enable_speech_emotion?: boolean;
16
+ output_audio?: {
17
+ language?: string;
18
+ };
19
+ audio?: {
20
+ input?: {
21
+ format?: {
22
+ type?: "pcm";
23
+ sample_rate?: 16000;
24
+ sample_format?: "s16le";
25
+ channels?: 1 | 2 | 4;
26
+ packing?: "interleaved";
27
+ channel_layout?: "mono" | "raw_mic_array" | "foa_ambix";
28
+ };
29
+ };
30
+ output?: {
31
+ voice?: string;
32
+ format?: {
33
+ type?: "pcm" | "wav";
34
+ sample_rate?: 8000 | 16000 | 24000 | 48000;
35
+ };
36
+ };
37
+ };
38
+ video?: {
39
+ input?: {
40
+ representation_compact?: "none" | "normal";
41
+ };
42
+ };
43
+ }
44
+ export interface QwenCloudRealtimeSession extends RealtimeSession {
45
+ /** Only acknowledges a pending server approval; never approves calls implicitly. */
46
+ respondToMcpApproval(approvalRequestId: string, approve: boolean): Promise<void>;
47
+ /** Continue after response.done containing server-executed MCP results. */
48
+ createResponse(): Promise<void>;
49
+ }
50
+ export declare const isQwenAudioRealtime: (id: string) => boolean;
51
+ export declare const isQwenOmni38Realtime: (id: string) => boolean;
52
+ export declare const isQwenCloudRealtime: (id: string) => boolean;
53
+ /** Validates cloud-specific fields and combines native MCP with the shared function-tool mapper. */
54
+ export declare const mapQwenCloudRealtimeSession: (id: string, config: RealtimeSessionConfig, base: Record<string, any>) => Record<string, any>;
55
+ export declare const validateQwenCloudAudioFrame: (frame: AudioFrame, config: RealtimeSessionConfig) => void;
56
+ export declare const qwenCloudAudioEvent: (payload: Record<string, unknown>, config: RealtimeSessionConfig) => RealtimeEvent[] | undefined;
57
+ export declare const extendQwenCloudRealtimeSession: (session: RealtimeSession, connection: RealtimeConnection, pendingApprovals?: Set<string>) => QwenCloudRealtimeSession;
58
+ //# sourceMappingURL=cloud-realtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-realtime.d.ts","sourceRoot":"","sources":["../src/cloud-realtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAAE,KAAK,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAC1F,KAAK,aAAa,EAAkB,MAAM,iBAAiB,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,KAAK,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACvC;AACD,MAAM,WAAW,wBAAyB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,UAAU,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,KAAK,CAAC;gBAAC,WAAW,CAAC,EAAE,KAAK,CAAC;gBAAC,aAAa,CAAC,EAAE,OAAO,CAAC;gBAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAC,OAAO,CAAC,EAAE,aAAa,CAAC;gBAAC,cAAc,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,WAAW,CAAA;aAAE,CAAA;SAAE,CAAC;QAC5L,MAAM,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;gBAAC,WAAW,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;aAAE,CAAA;SAAE,CAAC;KAC5G,CAAC;IACF,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE;YAAE,sBAAsB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;SAAE,CAAA;KAAE,CAAC;CACpE;AACD,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC/D,oFAAoF;IACpF,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,2EAA2E;IAC3E,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AACD,eAAO,MAAM,mBAAmB,OAAQ,MAAM,YAAiE,CAAC;AAChH,eAAO,MAAM,oBAAoB,OAAQ,MAAM,YAAqD,CAAC;AACrG,eAAO,MAAM,mBAAmB,OAAQ,MAAM,YAAwD,CAAC;AAevG,oGAAoG;AACpG,eAAO,MAAM,2BAA2B,OAAQ,MAAM,UAAU,qBAAqB,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,wBAsC/G,CAAC;AAEF,eAAO,MAAM,2BAA2B,UAAW,UAAU,UAAU,qBAAqB,SAK3F,CAAC;AAEF,eAAO,MAAM,mBAAmB,YAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,qBAAqB,KAAG,aAAa,EAAE,GAAG,SAOvH,CAAC;AAEF,eAAO,MAAM,8BAA8B,YAAa,eAAe,cAAc,kBAAkB,qBAAqB,GAAG,CAAC,MAAM,CAAC,KAAG,wBAaxI,CAAC"}
@@ -0,0 +1,123 @@
1
+ import { ConfigurationError, UnsupportedFeatureError, decodeBase64WithLimit } from "@zhivex-ai/core";
2
+ export const isQwenAudioRealtime = (id) => /^qwen-audio-3\.[01]-realtime-(plus|flash)(?:-|$)/i.test(id);
3
+ export const isQwenOmni38Realtime = (id) => /^qwen3\.8-omni-flash-realtime(?:-|$)/i.test(id);
4
+ export const isQwenCloudRealtime = (id) => isQwenAudioRealtime(id) || isQwenOmni38Realtime(id);
5
+ const mcpServer = (server) => {
6
+ if (server.type !== "mcp" || !/^[a-zA-Z0-9_-]{1,64}$/.test(server.server_label))
7
+ throw new ConfigurationError("Invalid MCP server label.");
8
+ let url;
9
+ try {
10
+ url = new URL(server.server_url);
11
+ }
12
+ catch {
13
+ throw new ConfigurationError("MCP server_url must be a public HTTPS URL.");
14
+ }
15
+ if (url.protocol !== "https:" || url.username || url.password || url.hash || (url.port && url.port !== "443") || server.server_url.length > 4096)
16
+ throw new ConfigurationError("MCP server_url must be HTTPS port 443 without credentials or fragment.");
17
+ if (server.require_approval !== undefined && !["always", "never"].includes(server.require_approval))
18
+ throw new ConfigurationError("Invalid MCP require_approval.");
19
+ if (server.authorization !== undefined && (server.authorization.length > 8192 || !/^[\x20-\x7E]*$/.test(server.authorization)))
20
+ throw new ConfigurationError("Invalid MCP authorization value.");
21
+ if (server.allowed_tools && (!Array.isArray(server.allowed_tools) || server.allowed_tools.some(name => !/^[\w.-]{1,64}$/.test(name))))
22
+ throw new ConfigurationError("Invalid MCP allowed_tools.");
23
+ const headers = Object.entries(server.headers ?? {});
24
+ if (headers.length > 16 || headers.some(([name, value]) => !/^[!#$%&'*+.^_`|~0-9A-Za-z-]{1,128}$/.test(name) || /^(mcp-|proxy-|x-forwarded-)/i.test(name) || /^(host|authorization|connection|content-length|transfer-encoding|accept|content-type|forwarded|cookie|origin|upgrade|te|trailer)$/i.test(name) || typeof value !== "string" || value.length > 8192 || !/^[\x20-\x7E]*$/.test(value)))
25
+ throw new ConfigurationError("Invalid or prohibited MCP headers.");
26
+ return { ...server, require_approval: server.require_approval ?? "always" };
27
+ };
28
+ /** Validates cloud-specific fields and combines native MCP with the shared function-tool mapper. */
29
+ export const mapQwenCloudRealtimeSession = (id, config, base) => {
30
+ const options = config.providerOptions;
31
+ const omni = isQwenOmni38Realtime(id);
32
+ const output = { ...base };
33
+ delete output.mcpServers;
34
+ if (config.inputAudioMediaType && config.inputAudioMediaType !== "audio/pcm")
35
+ throw new ConfigurationError("Qwen realtime input requires PCM16.");
36
+ if (config.inputSampleRateHz !== undefined && config.inputSampleRateHz !== 16000)
37
+ throw new ConfigurationError("Qwen realtime input requires 16000 Hz.");
38
+ if (options?.audio && !omni)
39
+ throw new UnsupportedFeatureError("Nested audio format configuration requires Qwen 3.8 Omni Realtime.");
40
+ if (options?.video && !omni)
41
+ throw new UnsupportedFeatureError("Qwen Audio Realtime does not accept video configuration.");
42
+ const input = options?.audio?.input?.format ?? {};
43
+ const channels = config.channels ?? input.channels ?? 1;
44
+ if (!(omni ? [1, 2, 4] : [1]).includes(channels))
45
+ throw new ConfigurationError("Unsupported realtime input channel count.");
46
+ if (input.type !== undefined && input.type !== "pcm" || input.sample_rate !== undefined && input.sample_rate !== 16000 || input.sample_format !== undefined && input.sample_format !== "s16le" || input.packing !== undefined && input.packing !== "interleaved")
47
+ throw new ConfigurationError("Multichannel audio requires PCM16 16000 Hz interleaved input.");
48
+ if (config.channels !== undefined && input.channels !== undefined && config.channels !== input.channels)
49
+ throw new ConfigurationError("Conflicting realtime channel counts.");
50
+ const layout = { 1: "mono", 2: "raw_mic_array", 4: "foa_ambix" }[channels];
51
+ if (input.channel_layout !== undefined && input.channel_layout !== layout)
52
+ throw new ConfigurationError("channel_layout does not match channels.");
53
+ const audioOutput = options?.audio?.output?.format ?? {};
54
+ const outputRate = config.outputSampleRateHz ?? audioOutput.sample_rate ?? 24000;
55
+ const outputType = config.outputAudioMediaType === "audio/wav" ? "wav" : audioOutput.type ?? "pcm";
56
+ if (!(omni ? [8000, 16000, 24000, 48000] : [24000]).includes(outputRate))
57
+ throw new ConfigurationError("Unsupported realtime output sample rate.");
58
+ if (!["pcm", "wav"].includes(outputType) || (!omni && outputType !== "pcm") || config.outputAudioMediaType && !["audio/pcm", ...(omni ? ["audio/wav"] : [])].includes(config.outputAudioMediaType))
59
+ throw new ConfigurationError("Unsupported realtime output audio format.");
60
+ if (omni)
61
+ output.audio = { input: { format: { ...input, type: "pcm", sample_rate: 16000, sample_format: "s16le", channels, packing: "interleaved", channel_layout: layout } }, output: { voice: config.voice ?? options?.audio?.output?.voice ?? "Tina", format: { type: outputType, sample_rate: outputRate } } };
62
+ if (omni && options?.audio?.output?.voice && !config.voice)
63
+ output.modalities = ["text", "audio"];
64
+ if (options?.video?.input?.representation_compact !== undefined && !["none", "normal"].includes(options.video.input.representation_compact))
65
+ throw new ConfigurationError("Invalid video representation_compact.");
66
+ const servers = options?.mcpServers ?? [];
67
+ if (!Array.isArray(servers) || servers.length > 8)
68
+ throw new ConfigurationError("At most eight MCP servers are supported.");
69
+ if (servers.length && !omni)
70
+ throw new UnsupportedFeatureError("MCP requires Qwen 3.8 Omni Realtime.");
71
+ if (new Set(servers.map(server => server.server_label)).size !== servers.length)
72
+ throw new ConfigurationError("MCP server labels must be unique.");
73
+ const tools = [...(base.tools ?? []), ...(config.toolChoice === "none" ? [] : servers.map(mcpServer))];
74
+ if (tools.length && options?.enable_search)
75
+ throw new UnsupportedFeatureError("Qwen realtime tools and web search are mutually exclusive.");
76
+ output.tools = tools.length ? tools : undefined;
77
+ if (isQwenAudioRealtime(id)) {
78
+ const history = options?.max_history_turns;
79
+ if (history !== undefined && (!Number.isInteger(history) || history < 1 || history > 50))
80
+ throw new ConfigurationError("max_history_turns must be an integer from 1 to 50.");
81
+ if (config.turnDetection?.type && !["server_vad", "smart_turn"].includes(String(config.turnDetection.type)))
82
+ throw new ConfigurationError("Audio realtime supports server_vad or smart_turn.");
83
+ if (options?.output_audio && !id.startsWith("qwen-audio-3.1-"))
84
+ throw new UnsupportedFeatureError("output_audio.language requires Qwen Audio 3.1.");
85
+ }
86
+ return output;
87
+ };
88
+ export const validateQwenCloudAudioFrame = (frame, config) => {
89
+ const channels = config.channels ?? config.providerOptions?.audio?.input?.format?.channels ?? 1;
90
+ if (frame.mediaType !== "audio/pcm" || frame.sampleRateHz !== undefined && frame.sampleRateHz !== 16000 || frame.channels !== undefined && frame.channels !== channels)
91
+ throw new ConfigurationError("Audio frame must match the session PCM16 16000 Hz channel configuration.");
92
+ const data = typeof frame.data === "string" ? decodeBase64WithLimit(frame.data.startsWith("data:") ? frame.data.slice(frame.data.indexOf(",") + 1) : frame.data, { maxBytes: 16 * 1024 * 1024, provider: "qwen", endpoint: "realtime" }) : frame.data instanceof Uint8Array ? frame.data : new Uint8Array(frame.data);
93
+ if (!data.byteLength || data.byteLength % (2 * channels))
94
+ throw new ConfigurationError("Audio frame must contain complete interleaved PCM16 samples.");
95
+ };
96
+ export const qwenCloudAudioEvent = (payload, config) => {
97
+ if (payload.type !== "response.audio.delta" || typeof payload.delta !== "string")
98
+ return undefined;
99
+ const output = config.providerOptions?.audio?.output?.format;
100
+ return [{ type: "realtime-audio-output", audio: decodeBase64WithLimit(payload.delta, { maxBytes: 16 * 1024 * 1024, provider: "qwen", endpoint: "realtime" }),
101
+ mediaType: config.outputAudioMediaType ?? (output?.type === "wav" ? "audio/wav" : "audio/pcm"), sampleRateHz: config.outputSampleRateHz ?? output?.sample_rate ?? 24000, channels: 1,
102
+ itemId: typeof payload.item_id === "string" ? payload.item_id : undefined, responseId: typeof payload.response_id === "string" ? payload.response_id : undefined,
103
+ providerMetadata: payload }];
104
+ };
105
+ export const extendQwenCloudRealtimeSession = (session, connection, pendingApprovals) => Object.assign(session, {
106
+ async respondToMcpApproval(approvalRequestId, approve) {
107
+ if (!isQwenOmni38Realtime(session.modelId))
108
+ throw new UnsupportedFeatureError("MCP approvals require Qwen 3.8 Omni Realtime.");
109
+ if (!approvalRequestId || typeof approve !== "boolean")
110
+ throw new ConfigurationError("MCP approval requires an exact request ID and boolean decision.");
111
+ if (pendingApprovals && !pendingApprovals.has(approvalRequestId))
112
+ throw new ConfigurationError("Unknown or already handled MCP approval request.");
113
+ // Consume before awaiting transport to prevent concurrent duplicate approvals.
114
+ pendingApprovals?.delete(approvalRequestId);
115
+ await connection.sendJson({ type: "conversation.item.create", item: { type: "mcp_approval_response", approval_request_id: approvalRequestId, approve } });
116
+ },
117
+ async createResponse() {
118
+ if (!isQwenCloudRealtime(session.modelId))
119
+ throw new UnsupportedFeatureError("Explicit response creation requires a Qwen Cloud conversation model.");
120
+ await connection.sendJson({ type: "response.create" });
121
+ }
122
+ });
123
+ //# sourceMappingURL=cloud-realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-realtime.js","sourceRoot":"","sources":["../src/cloud-realtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { type JsonValue } from "@zhivex-ai/core/provider";
2
+ export interface QwenDecisionChoiceQuestion {
3
+ type: "choice";
4
+ instructions: string;
5
+ criteria: Record<string, string>;
6
+ }
7
+ export interface QwenDecisionNoulQuestion {
8
+ type: "noul";
9
+ instructions: string;
10
+ }
11
+ export interface QwenDecisionScoreQuestion {
12
+ type: "score";
13
+ instructions: string;
14
+ criteria: readonly string[];
15
+ }
16
+ export type QwenDecisionQuestion = QwenDecisionChoiceQuestion | QwenDecisionNoulQuestion | QwenDecisionScoreQuestion;
17
+ export type QwenDecisionQuestions = Record<string, QwenDecisionQuestion>;
18
+ export interface QwenDecisionChoiceAnswer {
19
+ type: "choice";
20
+ choice: string;
21
+ confidence: number;
22
+ probabilities: Record<string, number>;
23
+ }
24
+ export interface QwenDecisionNoulAnswer {
25
+ type: "noul";
26
+ noul: number;
27
+ }
28
+ export interface QwenDecisionScoreAnswer {
29
+ type: "score";
30
+ score: number;
31
+ confidence: number;
32
+ legend: Record<string, string>;
33
+ probabilities: Record<string, number>;
34
+ }
35
+ export type QwenDecisionAnswer = QwenDecisionChoiceAnswer | QwenDecisionNoulAnswer | QwenDecisionScoreAnswer;
36
+ export type QwenDecisionAnswers<Q extends QwenDecisionQuestions> = {
37
+ [K in keyof Q]: Q[K] extends QwenDecisionChoiceQuestion ? QwenDecisionChoiceAnswer : Q[K] extends QwenDecisionNoulQuestion ? QwenDecisionNoulAnswer : Q[K] extends QwenDecisionScoreQuestion ? QwenDecisionScoreAnswer : QwenDecisionAnswer;
38
+ };
39
+ export interface QwenDecisionInput<Q extends QwenDecisionQuestions = QwenDecisionQuestions> {
40
+ state: string | Record<string, JsonValue>;
41
+ questions: Q;
42
+ abortSignal?: AbortSignal;
43
+ timeoutMs?: number;
44
+ /** Defaults to zero to avoid duplicate billable inference. */
45
+ maxRetries?: number;
46
+ retryBackoffMs?: number;
47
+ }
48
+ export interface QwenDecisionResult<Q extends QwenDecisionQuestions = QwenDecisionQuestions> {
49
+ model: string;
50
+ requestId: string;
51
+ answers: QwenDecisionAnswers<Q>;
52
+ usage: {
53
+ inputTokens: number;
54
+ };
55
+ latencyMs: number;
56
+ }
57
+ export interface QwenDecisionModel {
58
+ readonly provider: "qwen";
59
+ readonly modelId: string;
60
+ decide<Q extends QwenDecisionQuestions>(input: QwenDecisionInput<Q>): Promise<QwenDecisionResult<Q>>;
61
+ }
62
+ export interface QwenDecisionModelOptions {
63
+ apiKey: string;
64
+ baseURL: string;
65
+ fetch?: typeof globalThis.fetch;
66
+ allowUnsafeEndpoints?: boolean;
67
+ }
68
+ export declare function createQwenDecisionModel(modelId: string, options: QwenDecisionModelOptions): QwenDecisionModel;
69
+ //# sourceMappingURL=decision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../src/decision.ts"],"names":[],"mappings":"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"}