/** * Minified by jsDelivr using Terser v5.19.2. * Original file: /npm/@gradio/client@1.3.0/dist/index.js * * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files */ var _currentLine, __defProp = Object.defineProperty, __defNormalProp = (e,t,n)=>t in e ? __defProp(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n, __publicField = (e,t,n)=>(__defNormalProp(e, "symbol" != typeof t ? t + "" : t, n), n), __accessCheck = (e,t,n)=>{ if (!t.has(e)) throw TypeError("Cannot " + n) } , __privateGet = (e,t,n)=>(__accessCheck(e, t, "read from private field"), n ? n.call(e) : t.get(e)), __privateAdd = (e,t,n)=>{ if (t.has(e)) throw TypeError("Cannot add the same private member more than once"); t instanceof WeakSet ? t.add(e) : t.set(e, n) } , __privateSet = (e,t,n,s)=>(__accessCheck(e, t, "write to private field"), s ? s.call(e, n) : t.set(e, n), n), fn = new Intl.Collator(0,{ numeric: 1 }).compare; function semiver(e, t, n) { return e = e.split("."), t = t.split("."), fn(e[0], t[0]) || fn(e[1], t[1]) || (t[2] = t.slice(2).join("."), (n = /[.-]/.test(e[2] = e.slice(2).join("."))) == /[.-]/.test(t[2]) ? fn(e[2], t[2]) : n ? -1 : 1) } const HOST_URL = "host" , UPLOAD_URL = "upload" , LOGIN_URL = "login" , CONFIG_URL = "config" , API_INFO_URL = "info" , RUNTIME_URL = "runtime" , SLEEPTIME_URL = "sleeptime" , SPACE_FETCHER_URL = "https://gradio-space-api-fetcher-v2.hf.space/api" , QUEUE_FULL_MSG = "This application is currently busy. Please try again. " , BROKEN_CONNECTION_MSG = "Connection errored out. " , CONFIG_ERROR_MSG = "Could not resolve app config. " , SPACE_STATUS_ERROR_MSG = "Could not get space status. " , API_INFO_ERROR_MSG = "Could not get API info. " , SPACE_METADATA_ERROR_MSG = "Space metadata could not be loaded. " , INVALID_URL_MSG = "Invalid URL. A full URL path is required." , UNAUTHORIZED_MSG = "Not authorized to access this space. " , INVALID_CREDENTIALS_MSG = "Invalid credentials. Could not login. " , MISSING_CREDENTIALS_MSG = "Login credentials are required to access this space." , NODEJS_FS_ERROR_MSG = "File system access is only available in Node.js environments" , ROOT_URL_ERROR_MSG = "Root URL not found in client config" , FILE_PROCESSING_ERROR_MSG = "Error uploading file"; function resolve_root(e, t, n) { return t.startsWith("http://") || t.startsWith("https://") ? n ? e : t : e + t } async function get_jwt(e, t, n) { try { const s = await fetch(`https://huggingface.co/api/spaces/${e}/jwt`, { headers: { Authorization: `Bearer ${t}`, ...n ? { Cookie: n } : {} } }); return (await s.json()).token || !1 } catch (e) { return !1 } } function map_names_to_ids(e) { let t = {}; return e.forEach((({api_name: e, id: n})=>{ e && (t[e] = n) } )), t } async function resolve_config(e) { var t; const n = this.options.hf_token ? { Authorization: `Bearer ${this.options.hf_token}` } : {}; if (n["Content-Type"] = "application/json", "undefined" != typeof window && window.gradio_config && "http://localhost:9876" !== location.origin && !window.gradio_config.dev_mode) { const t = window.gradio_config.root , n = window.gradio_config; let s = resolve_root(e, n.root, !1); return n.root = s, { ...n, path: t } } if (e) { const s = join_urls(e, "config") , i = await this.fetch(s, { headers: n, credentials: "include" }); if (401 === (null == i ? void 0 : i.status) && !this.options.auth) throw new Error(MISSING_CREDENTIALS_MSG); if (401 === (null == i ? void 0 : i.status) && this.options.auth) throw new Error(INVALID_CREDENTIALS_MSG); if (200 === (null == i ? void 0 : i.status)) { let n = await i.json(); return n.path = n.path ?? "", n.root = e, null == (t = n.dependencies) || t.forEach(((e,t)=>{ void 0 === e.id && (e.id = t) } )), n } if (401 === (null == i ? void 0 : i.status)) throw new Error(UNAUTHORIZED_MSG); throw new Error(CONFIG_ERROR_MSG) } throw new Error(CONFIG_ERROR_MSG) } async function resolve_cookies() { const {http_protocol: e, host: t} = await process_endpoint(this.app_reference, this.options.hf_token); try { if (this.options.auth) { const n = await get_cookie_header(e, t, this.options.auth, this.fetch, this.options.hf_token); n && this.set_cookies(n) } } catch (e) { throw Error(e.message) } } async function get_cookie_header(e, t, n, s, i) { const o = new FormData; o.append("username", null == n ? void 0 : n[0]), o.append("password", null == n ? void 0 : n[1]); let a = {}; i && (a.Authorization = `Bearer ${i}`); const r = await s(`${e}//${t}/${LOGIN_URL}`, { headers: a, method: "POST", body: o, credentials: "include" }); if (200 === r.status) return r.headers.get("set-cookie"); throw 401 === r.status ? new Error(INVALID_CREDENTIALS_MSG) : new Error(SPACE_METADATA_ERROR_MSG) } function determine_protocol(e) { if (e.startsWith("http")) { const {protocol: t, host: n, pathname: s} = new URL(e); return n.endsWith("hf.space") ? { ws_protocol: "wss", host: n, http_protocol: t } : { ws_protocol: "https:" === t ? "wss" : "ws", http_protocol: t, host: n + ("/" !== s ? s : "") } } return e.startsWith("file:") ? { ws_protocol: "ws", http_protocol: "http:", host: "lite.local" } : { ws_protocol: "wss", http_protocol: "https:", host: e } } const parse_and_set_cookies = e=>{ let t = []; return e.split(/,(?=\s*[^\s=;]+=[^\s=;]+)/).forEach((e=>{ const [n,s] = e.split(";")[0].split("="); n && s && t.push(`${n.trim()}=${s.trim()}`) } )), t } , RE_SPACE_NAME = /^[a-zA-Z0-9_\-\.]+\/[a-zA-Z0-9_\-\.]+$/ , RE_SPACE_DOMAIN = /.*hf\.space\/{0,1}$/; async function process_endpoint(e, t) { const n = {}; t && (n.Authorization = `Bearer ${t}`); const s = e.trim().replace(/\/$/, ""); if (RE_SPACE_NAME.test(s)) try { const t = await fetch(`https://huggingface.co/api/spaces/${s}/${HOST_URL}`, { headers: n }); return { space_id: e, ...determine_protocol((await t.json()).host) } } catch (e) { throw new Error(SPACE_METADATA_ERROR_MSG) } if (RE_SPACE_DOMAIN.test(s)) { const {ws_protocol: e, http_protocol: t, host: n} = determine_protocol(s); return { space_id: n.replace(".hf.space", ""), ws_protocol: e, http_protocol: t, host: n } } return { space_id: !1, ...determine_protocol(s) } } const join_urls = (...e)=>{ try { return e.reduce(((e,t)=>(e = e.replace(/\/+$/, ""), t = t.replace(/^\/+/, ""), new URL(t,e + "/").toString()))) } catch (e) { throw new Error(INVALID_URL_MSG) } } ; function transform_api_info(e, t, n) { const s = { named_endpoints: {}, unnamed_endpoints: {} }; return Object.keys(e).forEach((i=>{ "named_endpoints" !== i && "unnamed_endpoints" !== i || (s[i] = {}, Object.entries(e[i]).forEach((([e,{parameters: o, returns: a}])=>{ var r, c, l, d; const p = (null == (r = t.dependencies.find((t=>t.api_name === e || t.api_name === e.replace("/", "")))) ? void 0 : r.id) || n[e.replace("/", "")] || -1 , u = -1 !== p ? null == (c = t.dependencies.find((e=>e.id == p))) ? void 0 : c.types : { generator: !1, cancel: !1 }; if (-1 !== p && (null == (d = null == (l = t.dependencies.find((e=>e.id == p))) ? void 0 : l.inputs) ? void 0 : d.length) !== o.length) { const e = t.dependencies.find((e=>e.id == p)).inputs.map((e=>{ var n; return null == (n = t.components.find((t=>t.id === e))) ? void 0 : n.type } )); try { e.forEach(((e,t)=>{ if ("state" === e) { const e = { component: "state", example: null, parameter_default: null, parameter_has_default: !0, parameter_name: null, hidden: !0 }; o.splice(t, 0, e) } } )) } catch (e) { console.error(e) } } const _ = (e,t,n,s)=>({ ...e, description: get_description(null == e ? void 0 : e.type, n), type: get_type(null == e ? void 0 : e.type, t, n, s) || "" }); s[i][e] = { parameters: o.map((e=>_(e, null == e ? void 0 : e.component, null == e ? void 0 : e.serializer, "parameter"))), returns: a.map((e=>_(e, null == e ? void 0 : e.component, null == e ? void 0 : e.serializer, "return"))), type: u } } ))) } )), s } function get_type(e, t, n, s) { switch (null == e ? void 0 : e.type) { case "string": return "string"; case "boolean": return "boolean"; case "number": return "number" } return "JSONSerializable" === n || "StringSerializable" === n ? "any" : "ListStringSerializable" === n ? "string[]" : "Image" === t ? "parameter" === s ? "Blob | File | Buffer" : "string" : "FileSerializable" === n ? "array" === (null == e ? void 0 : e.type) ? "parameter" === s ? "(Blob | File | Buffer)[]" : "{ name: string; data: string; size?: number; is_file?: boolean; orig_name?: string}[]" : "parameter" === s ? "Blob | File | Buffer" : "{ name: string; data: string; size?: number; is_file?: boolean; orig_name?: string}" : "GallerySerializable" === n ? "parameter" === s ? "[(Blob | File | Buffer), (string | null)][]" : "[{ name: string; data: string; size?: number; is_file?: boolean; orig_name?: string}, (string | null))][]" : void 0 } function get_description(e, t) { return "GallerySerializable" === t ? "array of [file, label] tuples" : "ListStringSerializable" === t ? "array of strings" : "FileSerializable" === t ? "array of files or single file" : null == e ? void 0 : e.description } function handle_message(e, t) { const n = !0; switch (e.msg) { case "send_data": return { type: "data" }; case "send_hash": return { type: "hash" }; case "queue_full": return { type: "update", status: { queue: n, message: QUEUE_FULL_MSG, stage: "error", code: e.code, success: e.success } }; case "heartbeat": return { type: "heartbeat" }; case "unexpected_error": return { type: "unexpected_error", status: { queue: n, message: e.message, stage: "error", success: !1 } }; case "estimation": return { type: "update", status: { queue: n, stage: t || "pending", code: e.code, size: e.queue_size, position: e.rank, eta: e.rank_eta, success: e.success } }; case "progress": return { type: "update", status: { queue: n, stage: "pending", code: e.code, progress_data: e.progress_data, success: e.success } }; case "log": return { type: "log", data: e }; case "process_generating": return { type: "generating", status: { queue: n, message: e.success ? null : e.output.error, stage: e.success ? "generating" : "error", code: e.code, progress_data: e.progress_data, eta: e.average_duration }, data: e.success ? e.output : null }; case "process_completed": return "error"in e.output ? { type: "update", status: { queue: n, message: e.output.error, visible: e.output.visible, duration: e.output.duration, stage: "error", code: e.code, success: e.success } } : { type: "complete", status: { queue: n, message: e.success ? void 0 : e.output.error, stage: e.success ? "complete" : "error", code: e.code, progress_data: e.progress_data, changed_state_ids: e.success ? e.output.changed_state_ids : void 0 }, data: e.success ? e.output : null }; case "process_starts": return { type: "update", status: { queue: n, stage: "pending", code: e.code, size: e.rank, position: 0, success: e.success, eta: e.eta } } } return { type: "none", status: { stage: "error", queue: n } } } const map_data_to_params = (e=[],t)=>{ const n = Object.values(t.named_endpoints).flatMap((e=>e.parameters)); if (Array.isArray(e)) return e.length > n.length && console.warn("Too many arguments provided for the endpoint."), e; const s = [] , i = Object.keys(e); return n.forEach(((t,n)=>{ if (e.hasOwnProperty(t.parameter_name)) s[n] = e[t.parameter_name]; else { if (!t.parameter_has_default) throw new Error(`No value provided for required parameter: ${t.parameter_name}`); s[n] = t.parameter_default } } )), i.forEach((e=>{ if (!n.some((t=>t.parameter_name === e))) throw new Error(`Parameter \`${e}\` is not a valid keyword argument. Please refer to the API for usage.`) } )), s.forEach(((e,t)=>{ if (void 0 === e && !n[t].parameter_has_default) throw new Error(`No value provided for required parameter: ${n[t].parameter_name}`) } )), s } ; async function view_api() { if (this.api_info) return this.api_info; const {hf_token: e} = this.options , {config: t} = this , n = { "Content-Type": "application/json" }; if (e && (n.Authorization = `Bearer ${e}`), t) try { let e, s; if ("undefined" != typeof window && window.gradio_api_info) s = window.gradio_api_info; else { if (semiver((null == t ? void 0 : t.version) || "2.0.0", "3.30") < 0) e = await this.fetch(SPACE_FETCHER_URL, { method: "POST", body: JSON.stringify({ serialize: !1, config: JSON.stringify(t) }), headers: n, credentials: "include" }); else { const s = join_urls(t.root, "info"); e = await this.fetch(s, { headers: n, credentials: "include" }) } if (!e.ok) throw new Error(BROKEN_CONNECTION_MSG); s = await e.json() } return "api"in s && (s = s.api), s.named_endpoints["/predict"] && !s.unnamed_endpoints[0] && (s.unnamed_endpoints[0] = s.named_endpoints["/predict"]), transform_api_info(s, t, this.api_map) } catch (e) { e.message } } async function upload_files(e, t, n) { var s; const i = {}; (null == (s = null == this ? void 0 : this.options) ? void 0 : s.hf_token) && (i.Authorization = `Bearer ${this.options.hf_token}`); const o = []; let a; for (let s = 0; s < t.length; s += 1e3) { const r = t.slice(s, s + 1e3) , c = new FormData; r.forEach((e=>{ c.append("files", e) } )); try { const t = n ? `${e}/upload?upload_id=${n}` : `${e}/upload`; a = await this.fetch(t, { method: "POST", body: c, headers: i, credentials: "include" }) } catch (e) { throw new Error(BROKEN_CONNECTION_MSG + e.message) } if (!a.ok) { const e = await a.text(); return { error: `HTTP ${a.status}: ${e}` } } const l = await a.json(); l && o.push(...l) } return { files: o } } async function upload(e, t, n, s) { let i = (Array.isArray(e) ? e : [e]).map((e=>e.blob)); const o = i.filter((e=>e.size > (s ?? 1 / 0))); if (o.length) throw new Error(`File size exceeds the maximum allowed size of ${s} bytes: ${o.map((e=>e.name)).join(", ")}`); return await Promise.all(await this.upload_files(t, i, n).then((async n=>{ if (n.error) throw new Error(n.error); return n.files ? n.files.map(((n,s)=>new FileData({ ...e[s], path: n, url: t + "/file=" + n }))) : [] } ))) } async function prepare_files(e, t) { return e.map((e=>new FileData({ path: e.name, orig_name: e.name, blob: e, size: e.size, mime_type: e.type, is_stream: t }))) } class FileData { constructor({path: e, url: t, orig_name: n, size: s, blob: i, is_stream: o, mime_type: a, alt_text: r}) { __publicField(this, "path"), __publicField(this, "url"), __publicField(this, "orig_name"), __publicField(this, "size"), __publicField(this, "blob"), __publicField(this, "is_stream"), __publicField(this, "mime_type"), __publicField(this, "alt_text"), __publicField(this, "meta", { _type: "gradio.FileData" }), this.path = e, this.url = t, this.orig_name = n, this.size = s, this.blob = t ? void 0 : i, this.is_stream = o, this.mime_type = a, this.alt_text = r } } class Command { constructor(e, t) { __publicField(this, "type"), __publicField(this, "command"), __publicField(this, "meta"), __publicField(this, "fileData"), this.type = "command", this.command = e, this.meta = t } } const is_node = "undefined" != typeof process && process.versions && process.versions.node; function update_object(e, t, n) { for (; n.length > 1; ) { const t = n.shift(); if ("string" != typeof t && "number" != typeof t) throw new Error("Invalid key type"); e = e[t] } const s = n.shift(); if ("string" != typeof s && "number" != typeof s) throw new Error("Invalid key type"); e[s] = t } async function walk_and_store_blobs(e, t=void 0, n=[], s=!1, i=void 0) { if (Array.isArray(e)) { let o = []; return await Promise.all(e.map((async(a,r)=>{ var c; let l = n.slice(); l.push(String(r)); const d = await walk_and_store_blobs(e[r], s ? (null == (c = null == i ? void 0 : i.parameters[r]) ? void 0 : c.component) || void 0 : t, l, !1, i); o = o.concat(d) } ))), o } if (globalThis.Buffer && e instanceof globalThis.Buffer || e instanceof Blob) return [{ path: n, blob: new Blob([e]), type: t }]; if ("object" == typeof e && null !== e) { let t = []; for (const s of Object.keys(e)) { const o = [...n, s] , a = e[s]; t = t.concat(await walk_and_store_blobs(a, void 0, o, !1, i)) } return t } return [] } function skip_queue(e, t) { var n, s; let i = null == (s = null == (n = null == t ? void 0 : t.dependencies) ? void 0 : n.find((t=>t.id == e))) ? void 0 : s.queue; return null != i ? !i : !t.enable_queue } function post_message(e, t) { return new Promise(((n,s)=>{ const i = new MessageChannel; i.port1.onmessage = ({data: e})=>{ i.port1.close(), n(e) } , window.parent.postMessage(e, t, [i.port2]) } )) } function handle_file(e) { if ("string" == typeof e) { if (e.startsWith("http://") || e.startsWith("https://")) return { path: e, url: e, orig_name: e.split("/").pop() ?? "unknown", meta: { _type: "gradio.FileData" } }; if (is_node) return new Command("upload_file",{ path: e, name: e, orig_path: e }) } else { if ("undefined" != typeof File && e instanceof File) return new Blob([e]); if (e instanceof Buffer) return new Blob([e]); if (e instanceof Blob) return e } throw new Error("Invalid input: must be a URL, File, Blob, or Buffer object.") } function handle_payload(e, t, n, s, i=!1) { if ("input" === s && !i) throw new Error("Invalid code path. Cannot skip state inputs for input."); if ("output" === s && i) return e; let o = [] , a = 0; const r = "input" === s ? t.inputs : t.outputs; for (let t = 0; t < r.length; t++) { const s = r[t] , c = n.find((e=>e.id === s)); if ("state" !== (null == c ? void 0 : c.type)) { const t = e[a]; o.push(t), a++ } else { if (!i) { a++; continue } if (e.length === r.length) { const t = e[a]; o.push(t), a++ } else o.push(null) } } return o } async function handle_blob(e, t, n) { const s = this; await process_local_file_commands(s, t); const i = await walk_and_store_blobs(t, void 0, [], !0, n); return (await Promise.all(i.map((async({path: t, blob: n, type: i})=>{ if (!n) return { path: t, type: i }; const o = await s.upload_files(e, [n]); return { path: t, file_url: o.files && o.files[0], type: i, name: "undefined" != typeof File && n instanceof File ? null == n ? void 0 : n.name : void 0 } } )))).forEach((({path: e, file_url: n, type: s, name: i})=>{ if ("Gallery" === s) update_object(t, n, e); else if (n) { const s = new FileData({ path: n, orig_name: i }); update_object(t, s, e) } } )), t } async function process_local_file_commands(e, t) { var n, s; if (!((null == (n = e.config) ? void 0 : n.root) || (null == (s = e.config) ? void 0 : s.root_url))) throw new Error(ROOT_URL_ERROR_MSG); await recursively_process_commands(e, t) } async function recursively_process_commands(e, t, n=[]) { for (const s in t) t[s]instanceof Command ? await process_single_command(e, t, s) : "object" == typeof t[s] && null !== t[s] && await recursively_process_commands(e, t[s], [...n, s]) } async function process_single_command(e, t, n) { var s, i; let o = t[n]; const a = (null == (s = e.config) ? void 0 : s.root) || (null == (i = e.config) ? void 0 : i.root_url); if (!a) throw new Error(ROOT_URL_ERROR_MSG); try { let s, i; if ("undefined" == typeof process || !process.versions || !process.versions.node) throw new Error(NODEJS_FS_ERROR_MSG); { const e = await import("fs/promises"); i = (await import("path")).resolve(process.cwd(), o.meta.path), s = await e.readFile(i) } const r = new Blob([s],{ type: "application/octet-stream" }) , c = await e.upload_files(a, [r]) , l = c.files && c.files[0]; if (l) { const e = new FileData({ path: l, orig_name: o.meta.name || "" }); t[n] = e } } catch (e) { console.error(FILE_PROCESSING_ERROR_MSG, e) } } async function post_data(e, t, n) { const s = { "Content-Type": "application/json" }; this.options.hf_token && (s.Authorization = `Bearer ${this.options.hf_token}`); try { var i = await this.fetch(e, { method: "POST", body: JSON.stringify(t), headers: { ...s, ...n }, credentials: "include" }) } catch (e) { return [{ error: BROKEN_CONNECTION_MSG }, 500] } let o, a; try { o = await i.json(), a = i.status } catch (e) { o = { error: `Could not parse server response: ${e}` }, a = 500 } return [o, a] } async function predict(e, t) { let n = !1 , s = !1; if (!this.config) throw new Error("Could not resolve app config"); if ("number" == typeof e) this.config.dependencies.find((t=>t.id == e)); else { const t = e.replace(/^\//, ""); this.config.dependencies.find((e=>e.id == this.api_map[t])) } return new Promise((async(i,o)=>{ const a = this.submit(e, t, null, null, !0); let r; for await(const e of a) "data" === e.type && (s && i(r), n = !0, r = e), "status" === e.type && ("error" === e.stage && o(e), "complete" === e.stage && (s = !0, n && i(r))) } )) } async function check_space_status(e, t, n) { let s, i, o = "subdomain" === t ? `https://huggingface.co/api/spaces/by-subdomain/${e}` : `https://huggingface.co/api/spaces/${e}`; try { if (s = await fetch(o), i = s.status, 200 !== i) throw new Error; s = await s.json() } catch (e) { return void n({ status: "error", load_status: "error", message: SPACE_STATUS_ERROR_MSG, detail: "NOT_FOUND" }) } if (!s || 200 !== i) return; const {runtime: {stage: a}, id: r} = s; switch (a) { case "STOPPED": case "SLEEPING": n({ status: "sleeping", load_status: "pending", message: "Space is asleep. Waking it up...", detail: a }), setTimeout((()=>{ check_space_status(e, t, n) } ), 1e3); break; case "PAUSED": n({ status: "paused", load_status: "error", message: "This space has been paused by the author. If you would like to try this demo, consider duplicating the space.", detail: a, discussions_enabled: await discussions_enabled(r) }); break; case "RUNNING": case "RUNNING_BUILDING": n({ status: "running", load_status: "complete", message: "Space is running.", detail: a }); break; case "BUILDING": n({ status: "building", load_status: "pending", message: "Space is building...", detail: a }), setTimeout((()=>{ check_space_status(e, t, n) } ), 1e3); break; case "APP_STARTING": n({ status: "starting", load_status: "pending", message: "Space is starting...", detail: a }), setTimeout((()=>{ check_space_status(e, t, n) } ), 1e3); break; default: n({ status: "space_error", load_status: "error", message: "This space is experiencing an issue.", detail: a, discussions_enabled: await discussions_enabled(r) }) } } const check_and_wake_space = async(e,t)=>{ let n = 0; return new Promise((s=>{ check_space_status(e, RE_SPACE_NAME.test(e) ? "space_name" : "subdomain", (i=>{ t(i), "running" === i.status || "error" === i.status || "paused" === i.status || "space_error" === i.status ? s() : "sleeping" !== i.status && "building" !== i.status || (n < 12 ? (n++, setTimeout((()=>{ check_and_wake_space(e, t).then(s) } ), 5e3)) : s()) } )) } )) } , RE_DISABLED_DISCUSSION = /^(?=[^]*\b[dD]iscussions{0,1}\b)(?=[^]*\b[dD]isabled\b)[^]*$/; async function discussions_enabled(e) { try { const t = await fetch(`https://huggingface.co/api/spaces/${e}/discussions`, { method: "HEAD" }) , n = t.headers.get("x-error-message"); return !(!t.ok || n && RE_DISABLED_DISCUSSION.test(n)) } catch (e) { return !1 } } async function get_space_hardware(e, t) { const n = {}; t && (n.Authorization = `Bearer ${t}`); try { const t = await fetch(`https://huggingface.co/api/spaces/${e}/${RUNTIME_URL}`, { headers: n }); if (200 !== t.status) throw new Error("Space hardware could not be obtained."); const {hardware: s} = await t.json(); return s.current } catch (e) { throw new Error(e.message) } } async function set_space_timeout(e, t, n) { const s = {}; n && (s.Authorization = `Bearer ${n}`); const i = { seconds: t }; try { const t = await fetch(`https://huggingface.co/api/spaces/${e}/${SLEEPTIME_URL}`, { method: "POST", headers: { "Content-Type": "application/json", ...s }, body: JSON.stringify(i) }); if (200 !== t.status) throw new Error("Could not set sleep timeout on duplicated Space. Please visit *ADD HF LINK TO SETTINGS* to set a timeout manually to reduce billing charges."); return await t.json() } catch (e) { throw new Error(e.message) } } const hardware_types = ["cpu-basic", "cpu-upgrade", "cpu-xl", "t4-small", "t4-medium", "a10g-small", "a10g-large", "a10g-largex2", "a10g-largex4", "a100-large", "zero-a10g", "h100", "h100x8"]; async function duplicate(e, t) { const {hf_token: n, private: s, hardware: i, timeout: o, auth: a} = t; if (i && !hardware_types.includes(i)) throw new Error(`Invalid hardware type provided. Valid types are: ${hardware_types.map((e=>`"${e}"`)).join(",")}.`); const {http_protocol: r, host: c} = await process_endpoint(e, n); let l = null; if (a) { const e = await get_cookie_header(r, c, a, fetch); e && (l = parse_and_set_cookies(e)) } const d = { Authorization: `Bearer ${n}`, "Content-Type": "application/json", ...l ? { Cookie: l.join("; ") } : {} } , p = (await (await fetch("https://huggingface.co/api/whoami-v2", { headers: d })).json()).name , u = e.split("/")[1] , _ = { repository: `${p}/${u}` }; let h; s && (_.private = !0); try { i || (h = await get_space_hardware(e, n)) } catch (e) { throw Error(SPACE_METADATA_ERROR_MSG + e.message) } const f = i || h || "cpu-basic"; _.hardware = f; try { const s = await fetch(`https://huggingface.co/api/spaces/${e}/duplicate`, { method: "POST", headers: d, body: JSON.stringify(_) }); if (409 === s.status) try { return await Client.connect(`${p}/${u}`, t) } catch (e) { throw console.error("Failed to connect Client instance:", e), e } else if (200 !== s.status) throw new Error(s.statusText); const i = await s.json(); return await set_space_timeout(`${p}/${u}`, o || 300, n), await Client.connect(get_space_reference(i.url), t) } catch (e) { throw new Error(e) } } function get_space_reference(e) { const t = e.match(/https:\/\/huggingface.co\/spaces\/([^/]+\/[^/]+)/); if (t) return t[1] } class TextLineStream extends TransformStream { constructor(e={ allowCR: !1 }) { super({ transform: (t,n)=>{ for (t = __privateGet(this, _currentLine) + t; ; ) { const s = t.indexOf("\n") , i = e.allowCR ? t.indexOf("\r") : -1; if (-1 !== i && i !== t.length - 1 && (-1 === s || s - 1 > i)) { n.enqueue(t.slice(0, i)), t = t.slice(i + 1); continue } if (-1 === s) break; const o = "\r" === t[s - 1] ? s - 1 : s; n.enqueue(t.slice(0, o)), t = t.slice(s + 1) } __privateSet(this, _currentLine, t) } , flush: t=>{ if ("" === __privateGet(this, _currentLine)) return; const n = e.allowCR && __privateGet(this, _currentLine).endsWith("\r") ? __privateGet(this, _currentLine).slice(0, -1) : __privateGet(this, _currentLine); t.enqueue(n) } }), __privateAdd(this, _currentLine, "") } } function stream$1(e) { let t = new TextDecoderStream , n = new TextLineStream({ allowCR: !0 }); return e.pipeThrough(t).pipeThrough(n) } function split(e) { let t = /[:]\s*/.exec(e) , n = t && t.index; if (n) return [e.substring(0, n), e.substring(n + t[0].length)] } function fallback(e, t, n) { e.get(t) || e.set(t, n) } async function *events(e, t) { if (!e.body) return; let n, s, i = stream$1(e.body).getReader(); for (; ; ) { if (t && t.aborted) return i.cancel(); if (n = await i.read(), n.done) return; if (!n.value) { s && (yield s), s = void 0; continue } let[e,o] = split(n.value) || []; e && ("data" === e ? (s || (s = {}), s[e] = s[e] ? s[e] + "\n" + o : o) : "event" === e ? (s || (s = {}), s[e] = o) : "id" === e ? (s || (s = {}), s[e] = +o || o) : "retry" === e && (s || (s = {}), s[e] = +o || void 0)) } } async function stream(e, t) { let n = new Request(e,t); fallback(n.headers, "Accept", "text/event-stream"), fallback(n.headers, "Content-Type", "application/json"); let s = await fetch(n); if (!s.ok) throw s; return events(s, n.signal) } async function open_stream() { let {event_callbacks: e, unclosed_events: t, pending_stream_messages: n, stream_status: s, config: i, jwt: o} = this; const a = this; if (!i) throw new Error("Could not resolve app config"); s.open = !0; let r = null , c = new URLSearchParams({ session_hash: this.session_hash }).toString() , l = new URL(`${i.root}/queue/data?${c}`); o && l.searchParams.set("__sign", o), r = this.stream(l), r ? (r.onmessage = async function(o) { let r = JSON.parse(o.data); if ("close_stream" === r.msg) return void close_stream(s, a.abort_controller); const c = r.event_id; if (c) if (e[c] && i) { "process_completed" === r.msg && ["sse", "sse_v1", "sse_v2", "sse_v2.1", "sse_v3"].includes(i.protocol) && t.delete(c); let n = e[c]; "undefined" != typeof window && "undefined" != typeof document ? setTimeout(n, 0, r) : n(r) } else n[c] || (n[c] = []), n[c].push(r); else await Promise.all(Object.keys(e).map((t=>e[t](r)))) } , r.onerror = async function() { await Promise.all(Object.keys(e).map((t=>e[t]({ msg: "unexpected_error", message: BROKEN_CONNECTION_MSG })))) } ) : console.warn("Cannot connect to SSE endpoint: " + l.toString()) } function close_stream(e, t) { e && (e.open = !1, null == t || t.abort()) } function apply_diff_stream(e, t, n) { !e[t] ? (e[t] = [], n.data.forEach(((n,s)=>{ e[t][s] = n } ))) : n.data.forEach(((s,i)=>{ let o = apply_diff(e[t][i], s); e[t][i] = o, n.data[i] = o } )) } function apply_diff(e, t) { return t.forEach((([t,n,s])=>{ e = apply_edit(e, n, t, s) } )), e } function apply_edit(e, t, n, s) { if (0 === t.length) { if ("replace" === n) return s; if ("append" === n) return e + s; throw new Error(`Unsupported action: ${n}`) } let i = e; for (let e = 0; e < t.length - 1; e++) i = i[t[e]]; const o = t[t.length - 1]; switch (n) { case "replace": i[o] = s; break; case "append": i[o] += s; break; case "add": Array.isArray(i) ? i.splice(Number(o), 0, s) : i[o] = s; break; case "delete": Array.isArray(i) ? i.splice(Number(o), 1) : delete i[o]; break; default: throw new Error(`Unknown action: ${n}`) } return e } function readable_stream(e, t={}) { const n = { close: ()=>{ console.warn("Method not implemented.") } , onerror: null, onmessage: null, onopen: null, readyState: 0, url: e.toString(), withCredentials: !1, CONNECTING: 0, OPEN: 1, CLOSED: 2, addEventListener: ()=>{ throw new Error("Method not implemented.") } , dispatchEvent: ()=>{ throw new Error("Method not implemented.") } , removeEventListener: ()=>{ throw new Error("Method not implemented.") } }; return stream(e, t).then((async e=>{ n.readyState = n.OPEN; try { for await(const t of e) n.onmessage && n.onmessage(t); n.readyState = n.CLOSED } catch (e) { n.onerror && n.onerror(e), n.readyState = n.CLOSED } } )).catch((e=>{ console.error(e), n.onerror && n.onerror(e), n.readyState = n.CLOSED } )), n } function submit(e, t, n, s, i) { var o; try { let r = function(e) { (i || U[e.type]) && p(e) } , c = function() { for (z = !0; J.length > 0; ) J.shift()({ value: void 0, done: !0 }) } , l = function(e) { z || (J.length > 0 ? J.shift()(e) : B.push(e)) } , d = function(e) { l(thenable_reject(e)), c() } , p = function(e) { l({ value: e, done: !1 }) } , u = function() { return B.length > 0 ? Promise.resolve(B.shift()) : z ? Promise.resolve({ value: void 0, done: !0 }) : new Promise((e=>J.push(e))) }; const {hf_token: _} = this.options , {fetch: h, app_reference: f, config: m, session_hash: g, api_info: w, api_map: y, stream_status: b, pending_stream_messages: v, pending_diff_streams: E, event_callbacks: S, unclosed_events: R, post_data: O, options: N} = this , k = this; if (!w) throw new Error("No API found"); if (!m) throw new Error("Could not resolve app config"); let C, A, {fn_index: F, endpoint_info: T, dependency: I} = get_endpoint_info(w, e, y, m), D = map_data_to_params(t, w), L = m.protocol ?? "ws"; const $ = "number" == typeof e ? "/predict" : e; let x, G = null, P = !1, j = {}, M = "undefined" != typeof window && "undefined" != typeof document ? new URLSearchParams(window.location.search).toString() : ""; const U = (null == (o = null == N ? void 0 : N.events) ? void 0 : o.reduce(((e,t)=>(e[t] = !0, e)), {})) || {}; const q = async e=>{ await this._resolve_hearbeat(e) } ; async function a(e) { if (!m) return; let t = e.render_id; m.components = [...m.components.filter((e=>e.props.rendered_in !== t)), ...e.components], m.dependencies = [...m.dependencies.filter((e=>e.rendered_in !== t)), ...e.dependencies]; const n = m.components.some((e=>"state" === e.type)) , s = m.dependencies.some((e=>e.targets.some((e=>"unload" === e[1])))); m.connect_heartbeat = n || s, await q(m), r({ type: "render", data: e, endpoint: $, fn_index: F }) } this.handle_blob(m.root, D, T).then((async e=>{ var t; let i = handle_payload(e, I, m.components, "input", !0); if (x = { data: i || [], event_data: n, fn_index: F, trigger_id: s }, skip_queue(F, m)) r({ type: "status", endpoint: $, stage: "pending", queue: !1, fn_index: F, time: new Date }), O(`${m.root}/run${$.startsWith("/") ? $ : `/${$}`}${M ? "?" + M : ""}`, { ...x, session_hash: g }).then((([e,t])=>{ const i = e.data; 200 == t ? (r({ type: "data", endpoint: $, fn_index: F, data: handle_payload(i, I, m.components, "output", N.with_null_state), time: new Date, event_data: n, trigger_id: s }), e.render_config && a(e.render_config), r({ type: "status", endpoint: $, fn_index: F, stage: "complete", eta: e.average_duration, queue: !1, time: new Date })) : r({ type: "status", stage: "error", endpoint: $, fn_index: F, message: e.error, queue: !1, time: new Date }) } )).catch((e=>{ r({ type: "status", stage: "error", message: e.message, endpoint: $, fn_index: F, queue: !1, time: new Date }) } )); else if ("ws" == L) { const {ws_protocol: e, host: t} = await process_endpoint(f, _); r({ type: "status", stage: "pending", queue: !0, endpoint: $, fn_index: F, time: new Date }); let i = new URL(`${e}://${resolve_root(t, m.path, !0)}/queue/join${M ? "?" + M : ""}`); this.jwt && i.searchParams.set("__sign", this.jwt), C = new WebSocket(i), C.onclose = e=>{ e.wasClean || r({ type: "status", stage: "error", broken: !0, message: BROKEN_CONNECTION_MSG, queue: !0, endpoint: $, fn_index: F, time: new Date }) } , C.onmessage = function(e) { const t = JSON.parse(e.data) , {type: i, status: o, data: a} = handle_message(t, j[F]); if ("update" === i && o && !P) r({ type: "status", endpoint: $, fn_index: F, time: new Date, ...o }), "error" === o.stage && C.close(); else { if ("hash" === i) return void C.send(JSON.stringify({ fn_index: F, session_hash: g })); "data" === i ? C.send(JSON.stringify({ ...x, session_hash: g })) : "complete" === i ? P = o : "log" === i ? r({ type: "log", log: a.log, level: a.level, endpoint: $, duration: a.duration, visible: a.visible, fn_index: F }) : "generating" === i && r({ type: "status", time: new Date, ...o, stage: null == o ? void 0 : o.stage, queue: !0, endpoint: $, fn_index: F }) } a && (r({ type: "data", time: new Date, data: handle_payload(a.data, I, m.components, "output", N.with_null_state), endpoint: $, fn_index: F, event_data: n, trigger_id: s }), P && (r({ type: "status", time: new Date, ...P, stage: null == o ? void 0 : o.stage, queue: !0, endpoint: $, fn_index: F }), C.close())) } , semiver(m.version || "2.0.0", "3.6") < 0 && addEventListener("open", (()=>C.send(JSON.stringify({ hash: g })))) } else if ("sse" == L) { r({ type: "status", stage: "pending", queue: !0, endpoint: $, fn_index: F, time: new Date }); var o = new URLSearchParams({ fn_index: F.toString(), session_hash: g }).toString(); let e = new URL(`${m.root}/queue/join?${M ? M + "&" : ""}${o}`); if (this.jwt && e.searchParams.set("__sign", this.jwt), A = this.stream(e), !A) return Promise.reject(new Error("Cannot connect to SSE endpoint: " + e.toString())); A.onmessage = async function(e) { const t = JSON.parse(e.data) , {type: i, status: o, data: a} = handle_message(t, j[F]); if ("update" === i && o && !P) r({ type: "status", endpoint: $, fn_index: F, time: new Date, ...o }), "error" === o.stage && (null == A || A.close(), c()); else if ("data" === i) { G = t.event_id; let[e,n] = await O(`${m.root}/queue/data`, { ...x, session_hash: g, event_id: G }); 200 !== n && (r({ type: "status", stage: "error", message: BROKEN_CONNECTION_MSG, queue: !0, endpoint: $, fn_index: F, time: new Date }), null == A || A.close(), c()) } else "complete" === i ? P = o : "log" === i ? r({ type: "log", log: a.log, level: a.level, endpoint: $, duration: a.duration, visible: a.visible, fn_index: F }) : "generating" === i && r({ type: "status", time: new Date, ...o, stage: null == o ? void 0 : o.stage, queue: !0, endpoint: $, fn_index: F }); a && (r({ type: "data", time: new Date, data: handle_payload(a.data, I, m.components, "output", N.with_null_state), endpoint: $, fn_index: F, event_data: n, trigger_id: s }), P && (r({ type: "status", time: new Date, ...P, stage: null == o ? void 0 : o.stage, queue: !0, endpoint: $, fn_index: F }), null == A || A.close(), c())) } } else if ("sse_v1" == L || "sse_v2" == L || "sse_v2.1" == L || "sse_v3" == L) { r({ type: "status", stage: "pending", queue: !0, endpoint: $, fn_index: F, time: new Date }); let e = ""; "undefined" != typeof window && "undefined" != typeof document && (e = null == (t = null == window ? void 0 : window.location) ? void 0 : t.hostname); let n = "dev.spaces.huggingface.tech"; const s = e.includes(".dev.") ? `https://moon-${e.split(".")[1]}.${n}` : "https://huggingface.co" , i = "undefined" != typeof window && "undefined" != typeof document && window.parent != window , o = I.zerogpu && m.space_id; (i && o ? post_message("zerogpu-headers", s) : Promise.resolve(null)).then((e=>O(`${m.root}/queue/join?${M}`, { ...x, session_hash: g }, e))).then((async([e,t])=>{ if (503 === t) r({ type: "status", stage: "error", message: QUEUE_FULL_MSG, queue: !0, endpoint: $, fn_index: F, time: new Date }); else if (200 !== t) r({ type: "status", stage: "error", message: BROKEN_CONNECTION_MSG, queue: !0, endpoint: $, fn_index: F, time: new Date }); else { G = e.event_id; let t = async function(e) { try { const {type: t, status: n, data: s} = handle_message(e, j[F]); if ("heartbeat" == t) return; if ("update" === t && n && !P) r({ type: "status", endpoint: $, fn_index: F, time: new Date, ...n }); else if ("complete" === t) P = n; else if ("unexpected_error" == t) console.error("Unexpected error", null == n ? void 0 : n.message), r({ type: "status", stage: "error", message: (null == n ? void 0 : n.message) || "An Unexpected Error Occurred!", queue: !0, endpoint: $, fn_index: F, time: new Date }); else { if ("log" === t) return void r({ type: "log", log: s.log, level: s.level, endpoint: $, duration: s.duration, visible: s.visible, fn_index: F }); "generating" === t && (r({ type: "status", time: new Date, ...n, stage: null == n ? void 0 : n.stage, queue: !0, endpoint: $, fn_index: F }), s && ["sse_v2", "sse_v2.1", "sse_v3"].includes(L) && apply_diff_stream(E, G, s)) } s && (r({ type: "data", time: new Date, data: handle_payload(s.data, I, m.components, "output", N.with_null_state), endpoint: $, fn_index: F }), s.render_config && await a(s.render_config), P && (r({ type: "status", time: new Date, ...P, stage: null == n ? void 0 : n.stage, queue: !0, endpoint: $, fn_index: F }), c())), "complete" !== (null == n ? void 0 : n.stage) && "error" !== (null == n ? void 0 : n.stage) || (S[G] && delete S[G], G in E && delete E[G]) } catch (e) { console.error("Unexpected client exception", e), r({ type: "status", stage: "error", message: "An Unexpected Error Occurred!", queue: !0, endpoint: $, fn_index: F, time: new Date }), ["sse_v2", "sse_v2.1", "sse_v3"].includes(L) && (close_stream(b, k.abort_controller), b.open = !1, c()) } }; G in v && (v[G].forEach((e=>t(e))), delete v[G]), S[G] = t, R.add(G), b.open || await this.open_stream() } } )) } } )); let z = !1; const B = [] , J = [] , W = { [Symbol.asyncIterator]: ()=>W, next: u, throw: async e=>(d(e), u()), return: async()=>(c(), u()), cancel: async function() { const e = { stage: "complete", queue: !1, time: new Date }; P = e, r({ ...e, type: "status", endpoint: $, fn_index: F }); let t = {} , n = {}; "ws" === L ? (C && 0 === C.readyState ? C.addEventListener("open", (()=>{ C.close() } )) : C.close(), t = { fn_index: F, session_hash: g }) : (close_stream(b, k.abort_controller), c(), t = { event_id: G }, n = { event_id: G, session_hash: g, fn_index: F }); try { if (!m) throw new Error("Could not resolve app config"); "event_id"in n && await h(`${m.root}/cancel`, { headers: { "Content-Type": "application/json" }, method: "POST", body: JSON.stringify(n) }), await h(`${m.root}/reset`, { headers: { "Content-Type": "application/json" }, method: "POST", body: JSON.stringify(t) }) } catch (e) { console.warn("The `/reset` endpoint could not be called. Subsequent endpoint results may be unreliable.") } } }; return W } catch (H) { throw console.error("Submit function encountered an error:", H), H } } function thenable_reject(e) { return { then: (t,n)=>n(e) } } function get_endpoint_info(e, t, n, s) { let i, o, a; if ("number" == typeof t) i = t, o = e.unnamed_endpoints[i], a = s.dependencies.find((e=>e.id == t)); else { const r = t.replace(/^\//, ""); i = n[r], o = e.named_endpoints[t.trim()], a = s.dependencies.find((e=>e.id == n[r])) } if ("number" != typeof i) throw new Error("There is no endpoint matching that name of fn_index matching that number."); return { fn_index: i, endpoint_info: o, dependency: a } } _currentLine = new WeakMap; class Client { constructor(e, t={ events: ["data"] }) { __publicField(this, "app_reference"), __publicField(this, "options"), __publicField(this, "config"), __publicField(this, "api_info"), __publicField(this, "api_map", {}), __publicField(this, "session_hash", Math.random().toString(36).substring(2)), __publicField(this, "jwt", !1), __publicField(this, "last_status", {}), __publicField(this, "cookies", null), __publicField(this, "stream_status", { open: !1 }), __publicField(this, "pending_stream_messages", {}), __publicField(this, "pending_diff_streams", {}), __publicField(this, "event_callbacks", {}), __publicField(this, "unclosed_events", new Set), __publicField(this, "heartbeat_event", null), __publicField(this, "abort_controller", null), __publicField(this, "stream_instance", null), __publicField(this, "view_api"), __publicField(this, "upload_files"), __publicField(this, "upload"), __publicField(this, "handle_blob"), __publicField(this, "post_data"), __publicField(this, "submit"), __publicField(this, "predict"), __publicField(this, "open_stream"), __publicField(this, "resolve_config"), __publicField(this, "resolve_cookies"), this.app_reference = e, t.events || (t.events = ["data"]), this.options = t, this.view_api = view_api.bind(this), this.upload_files = upload_files.bind(this), this.handle_blob = handle_blob.bind(this), this.post_data = post_data.bind(this), this.submit = submit.bind(this), this.predict = predict.bind(this), this.open_stream = open_stream.bind(this), this.resolve_config = resolve_config.bind(this), this.resolve_cookies = resolve_cookies.bind(this), this.upload = upload.bind(this), this.fetch = this.fetch.bind(this), this.handle_space_success = this.handle_space_success.bind(this), this.stream = this.stream.bind(this) } fetch(e, t) { const n = new Headers((null == t ? void 0 : t.headers) || {}); return this && this.cookies && n.append("Cookie", this.cookies), fetch(e, { ...t, headers: n }) } stream(e) { const t = new Headers; return this && this.cookies && t.append("Cookie", this.cookies), this.abort_controller = new AbortController, this.stream_instance = readable_stream(e.toString(), { credentials: "include", headers: t, signal: this.abort_controller.signal }), this.stream_instance } async init() { var e; if (!("undefined" != typeof window && "WebSocket"in window || global.WebSocket)) { const e = await import("./wrapper-CviSselG.js"); global.WebSocket = e.WebSocket } try { this.options.auth && await this.resolve_cookies(), await this._resolve_config().then((({config: e})=>this._resolve_hearbeat(e))) } catch (e) { throw Error(e) } this.api_info = await this.view_api(), this.api_map = map_names_to_ids((null == (e = this.config) ? void 0 : e.dependencies) || []) } async _resolve_hearbeat(e) { if (e && (this.config = e, this.config && this.config.connect_heartbeat && this.config.space_id && this.options.hf_token && (this.jwt = await get_jwt(this.config.space_id, this.options.hf_token, this.cookies))), e.space_id && this.options.hf_token && (this.jwt = await get_jwt(e.space_id, this.options.hf_token)), this.config && this.config.connect_heartbeat) { const e = new URL(`${this.config.root}/heartbeat/${this.session_hash}`); this.jwt && e.searchParams.set("__sign", this.jwt), this.heartbeat_event || (this.heartbeat_event = this.stream(e)) } } static async connect(e, t={ events: ["data"] }) { const n = new this(e,t); return await n.init(), n } close() { close_stream(this.stream_status, this.abort_controller) } static async duplicate(e, t={ events: ["data"] }) { return duplicate(e, t) } async _resolve_config() { const {http_protocol: e, host: t, space_id: n} = await process_endpoint(this.app_reference, this.options.hf_token) , {status_callback: s} = this.options; let i; n && s && await check_and_wake_space(n, s); try { if (i = await this.resolve_config(`${e}//${t}`), !i) throw new Error(CONFIG_ERROR_MSG); return this.config_success(i) } catch (e) { if (!n || !s) throw s && s({ status: "error", message: "Could not load this space.", load_status: "error", detail: "NOT_FOUND" }), Error(e); check_space_status(n, RE_SPACE_NAME.test(n) ? "space_name" : "subdomain", this.handle_space_success) } } async config_success(e) { if (this.config = e, "undefined" != typeof window && "undefined" != typeof document && "https:" === window.location.protocol && (this.config.root = this.config.root.replace("http://", "https://")), this.config.auth_required) return this.prepare_return_obj(); try { this.api_info = await this.view_api() } catch (e) { console.error(API_INFO_ERROR_MSG + e.message) } return this.prepare_return_obj() } async handle_space_success(e) { if (!this) throw new Error(CONFIG_ERROR_MSG); const {status_callback: t} = this.options; if (t && t(e), "running" === e.status) try { if (this.config = await this._resolve_config(), !this.config) throw new Error(CONFIG_ERROR_MSG); return await this.config_success(this.config) } catch (e) { throw t && t({ status: "error", message: "Could not load this space.", load_status: "error", detail: "NOT_FOUND" }), e } } async component_server(e, t, n) { var s; if (!this.config) throw new Error(CONFIG_ERROR_MSG); const i = {} , {hf_token: o} = this.options , {session_hash: a} = this; let r; o && (i.Authorization = `Bearer ${this.options.hf_token}`); let c, l = this.config.components.find((t=>t.id === e)); if (r = (null == (s = null == l ? void 0 : l.props) ? void 0 : s.root_url) ? l.props.root_url : this.config.root, "binary"in n) { c = new FormData; for (const e in n.data) "binary" !== e && c.append(e, n.data[e]); c.set("component_id", e.toString()), c.set("fn_name", t), c.set("session_hash", a) } else c = JSON.stringify({ data: n, component_id: e, fn_name: t, session_hash: a }), i["Content-Type"] = "application/json"; o && (i.Authorization = `Bearer ${o}`); try { const e = await this.fetch(`${r}/component_server/`, { method: "POST", body: c, headers: i, credentials: "include" }); if (!e.ok) throw new Error("Could not connect to component server: " + e.statusText); return await e.json() } catch (e) { console.warn(e) } } set_cookies(e) { this.cookies = parse_and_set_cookies(e).join("; ") } prepare_return_obj() { return { config: this.config, predict: this.predict, submit: this.submit, view_api: this.view_api, component_server: this.component_server } } } async function client(e, t={ events: ["data"] }) { return await Client.connect(e, t) } async function duplicate_space(e, t) { return await Client.duplicate(e, t) } export {Client, FileData, client, duplicate_space as duplicate, handle_file, predict, prepare_files, submit, upload, upload_files}; //# sourceMappingURL=/sm/43cc1ed88d2ccd6cdd1267ec663b59d4da6fed75d9cd93a9161f228f3867e3a7.map